Add support to install multicast rules (#289)

This commit is contained in:
Tu Dang
2019-09-25 10:38:54 -07:00
committed by Nate Foster
parent 590f4ff6f2
commit d1705a797c
3 changed files with 41 additions and 0 deletions

View File

@@ -127,6 +127,14 @@ def program_switch(addr, device_id, sw_conf_file, workdir, proto_dump_fpath):
for entry in table_entries:
info(tableEntryToString(entry))
insertTableEntry(sw, entry, p4info_helper)
if 'multicast_group_entries' in sw_conf:
group_entries = sw_conf['multicast_group_entries']
info("Inserting %d group entries..." % len(group_entries))
for entry in group_entries:
info(groupEntryToString(entry))
insertMulticastGroupEntry(sw, entry, p4info_helper)
finally:
sw.shutdown()
@@ -191,5 +199,16 @@ def tableEntryToString(flow):
flow['table'], match_str, flow['action_name'], params)
def groupEntryToString(rule):
group_id = rule["multicast_group_id"]
replicas = ['%d' % replica["egress_port"] for replica in rule['replicas']]
ports_str = ', '.join(replicas)
return 'Group {0} => ({1})'.format(group_id, ports_str)
def insertMulticastGroupEntry(sw, rule, p4info_helper):
mc_entry = p4info_helper.buildMulticastGroupEntry(rule["multicast_group_id"], rule['replicas'])
sw.WriteMulticastGroupEntry(mc_entry)
if __name__ == '__main__':
main()