Begin to add egress / arp support

This commit is contained in:
Nico Schottelius 2019-04-02 17:13:05 +02:00
parent 08c7f4891c
commit 018e9eef09
3 changed files with 21 additions and 2 deletions

View file

@ -36,7 +36,8 @@ table_id_fields = {
3: 'TABLE_V6_NETWORKS',
4: 'TABLE_NAT46',
5: 'TABLE_V4_NETWORKS',
6: 'TABLE_ARP'
6: 'TABLE_ARP',
7: 'TABLE_ARP_EGRESS'
}
table_proto = {
@ -254,6 +255,7 @@ class L2Controller(object):
self.controller.table_add("v4_networks", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
# ARP support
self.controller.table_add("v4_arp_egress", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
router = "{}/32".format(self.ipv4_router(v4route['net']))
self.controller.table_add("v4_arp", "arp_reply",
[str(self.info['mac_broadcast']),

View file

@ -23,6 +23,7 @@ const bit<16> TABLE_V6_NETWORKS = 3;
const bit<16> TABLE_NAT46 = 4;
const bit<16> TABLE_V4_NETWORKS = 5;
const bit<16> TABLE_ARP = 6;
const bit<16> TABLE_ARP_EGRESS = 7;
const bit<16> TYPE_IPV4 = 0x0800;

View file

@ -360,6 +360,19 @@ Echo or Echo Reply Message
default_action = controller_debug_table_id(TABLE_ARP);
}
table v4_arp_egress {
key = {
hdr.arp.dst_ipv4_addr: lpm;
}
actions = {
controller_debug_table_id;
set_egress_port;
NoAction;
}
size = ICMP6_TABLE_SIZE;
default_action = controller_debug_table_id(TABLE_ARP_EGRESS);
}
/********************** ROUTING (egress definiton) TABLES ***********************************/
@ -432,7 +445,10 @@ Echo or Echo Reply Message
}
v4_networks.apply(); /* regular routing, egress */
} else if(hdr.arp.isValid()) {
v4_arp.apply();
if(v4_arp.apply().hit) {
v4_arp_egress.apply();
}
}
}
}