mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
nic_router: add verbose_packets per domain
A domain logs its packets if one of the global 'verbose_packets' or its local 'verbose_packets' is switched on. Ref #2670
This commit is contained in:
parent
bd16f89617
commit
2a77976164
@ -224,7 +224,11 @@ append config {
|
||||
|
||||
<report bytes="yes" config="yes" interval_sec="60" />
|
||||
|
||||
<domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1">
|
||||
<domain name="uplink"
|
||||
interface="10.0.2.55/24"
|
||||
gateway="10.0.2.1"
|
||||
verbose_packets="no">
|
||||
|
||||
<tcp-forward port="80" domain="http_server_1" to="192.168.1.18" />
|
||||
<tcp-forward port="8080" domain="http_server_2" to="192.168.2.72" />
|
||||
<udp-forward port="1" domain="udp_server_2" to="18.17.16.15" />
|
||||
|
@ -377,6 +377,12 @@ sent by the router (ETH, IPv4, ARP, UDP, TCP, DHCP).
|
||||
Log most important changes in the state of a domain (number of nic sessions
|
||||
connected, current IPv4 config).
|
||||
|
||||
! <config>
|
||||
! <domain verbose_packets="yes" ... >
|
||||
! <config/>
|
||||
|
||||
Log most important protocol header fields of each packet that is received or
|
||||
sent at a specific domain (ETH, IPv4, ARP, UDP, TCP, DHCP).
|
||||
|
||||
Examples
|
||||
########
|
||||
|
@ -140,9 +140,10 @@
|
||||
<xs:element name="udp-forward" type="L3_forward_rule" />
|
||||
|
||||
</xs:choice>
|
||||
<xs:attribute name="name" type="Domain_name" />
|
||||
<xs:attribute name="interface" type="Ipv4_address_prefix" />
|
||||
<xs:attribute name="gateway" type="Ipv4_address" />
|
||||
<xs:attribute name="name" type="Domain_name" />
|
||||
<xs:attribute name="interface" type="Ipv4_address_prefix" />
|
||||
<xs:attribute name="gateway" type="Ipv4_address" />
|
||||
<xs:attribute name="verbose_packets" type="Boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element><!-- domain -->
|
||||
|
||||
|
@ -110,7 +110,9 @@ Domain::Domain(Configuration &config, Xml_node const node, Allocator &alloc)
|
||||
Domain_base(node), _avl_member(_name, *this), _config(config),
|
||||
_node(node), _alloc(alloc),
|
||||
_ip_config(_node.attribute_value("interface", Ipv4_address_prefix()),
|
||||
_node.attribute_value("gateway", Ipv4_address()))
|
||||
_node.attribute_value("gateway", Ipv4_address())),
|
||||
_verbose_packets(_node.attribute_value("verbose_packets", false) ||
|
||||
_config.verbose_packets())
|
||||
{
|
||||
if (_name == Domain_name()) {
|
||||
error("Missing name attribute in domain node");
|
||||
|
@ -104,6 +104,7 @@ class Net::Domain : public Domain_base
|
||||
Link_side_tree _udp_links { };
|
||||
Genode::size_t _tx_bytes { 0 };
|
||||
Genode::size_t _rx_bytes { 0 };
|
||||
bool const _verbose_packets { false };
|
||||
|
||||
void _read_forward_rules(Genode::Cstring const &protocol,
|
||||
Domain_tree &domains,
|
||||
@ -164,22 +165,23 @@ class Net::Domain : public Domain_base
|
||||
** Accessors **
|
||||
***************/
|
||||
|
||||
Ipv4_config const &ip_config() const { return *_ip_config; }
|
||||
Domain_name const &name() { return _name; }
|
||||
Ip_rule_list &ip_rules() { return _ip_rules; }
|
||||
Forward_rule_tree &tcp_forward_rules() { return _tcp_forward_rules; }
|
||||
Forward_rule_tree &udp_forward_rules() { return _udp_forward_rules; }
|
||||
Transport_rule_list &tcp_rules() { return _tcp_rules; }
|
||||
Transport_rule_list &udp_rules() { return _udp_rules; }
|
||||
Nat_rule_tree &nat_rules() { return _nat_rules; }
|
||||
List<Interface> &interfaces() { return _interfaces; }
|
||||
Configuration &config() const { return _config; }
|
||||
Domain_avl_member &avl_member() { return _avl_member; }
|
||||
Dhcp_server &dhcp_server() { return _dhcp_server.deref(); }
|
||||
Arp_cache &arp_cache() { return _arp_cache; }
|
||||
Arp_waiter_list &foreign_arp_waiters() { return _foreign_arp_waiters; }
|
||||
Link_side_tree &tcp_links() { return _tcp_links; }
|
||||
Link_side_tree &udp_links() { return _udp_links; }
|
||||
bool verbose_packets() const { return _verbose_packets; }
|
||||
Ipv4_config const &ip_config() const { return *_ip_config; }
|
||||
Domain_name const &name() { return _name; }
|
||||
Ip_rule_list &ip_rules() { return _ip_rules; }
|
||||
Forward_rule_tree &tcp_forward_rules() { return _tcp_forward_rules; }
|
||||
Forward_rule_tree &udp_forward_rules() { return _udp_forward_rules; }
|
||||
Transport_rule_list &tcp_rules() { return _tcp_rules; }
|
||||
Transport_rule_list &udp_rules() { return _udp_rules; }
|
||||
Nat_rule_tree &nat_rules() { return _nat_rules; }
|
||||
List<Interface> &interfaces() { return _interfaces; }
|
||||
Configuration &config() const { return _config; }
|
||||
Domain_avl_member &avl_member() { return _avl_member; }
|
||||
Dhcp_server &dhcp_server() { return _dhcp_server.deref(); }
|
||||
Arp_cache &arp_cache() { return _arp_cache; }
|
||||
Arp_waiter_list &foreign_arp_waiters() { return _foreign_arp_waiters; }
|
||||
Link_side_tree &tcp_links() { return _tcp_links; }
|
||||
Link_side_tree &udp_links() { return _udp_links; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -879,7 +879,7 @@ void Interface::_handle_eth(void *const eth_base,
|
||||
/* inspect and handle ethernet frame */
|
||||
try {
|
||||
Ethernet_frame *const eth = reinterpret_cast<Ethernet_frame *>(eth_base);
|
||||
if (_config().verbose_packets()) {
|
||||
if (_domain.verbose_packets()) {
|
||||
log("(router <- ", _domain, ") ", *eth); }
|
||||
|
||||
if (_domain.ip_config().valid) {
|
||||
@ -953,7 +953,7 @@ void Interface::_send_submit_pkt(Packet_descriptor &pkt,
|
||||
{
|
||||
_source().submit_packet(pkt);
|
||||
_domain.raise_tx_bytes(pkt_size);
|
||||
if (_config().verbose_packets()) {
|
||||
if (_domain.verbose_packets()) {
|
||||
log("(", _domain, " <- router) ",
|
||||
*reinterpret_cast<Ethernet_frame *>(pkt_base));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user