diff options
author | Xavier Simonart <xavier.simonart@intel.com> | 2019-06-24 17:01:54 +0200 |
---|---|---|
committer | Xavier Simonart <xavier.simonart@intel.com> | 2019-10-09 19:09:34 +0200 |
commit | 48f8c3d212644a33dd0abaaa1a0c71d4decaafdf (patch) | |
tree | 515043d3dc43025bb5ce5e6cb842afd68ae891e9 /VNFs/DPPD-PROX/prox_args.c | |
parent | 4cc4dabe80eb7d19c20920b7ec20899d6a76a1dd (diff) |
Add support for igmp and multicast
Multicast can be enabled through configuration or through command line
- Through configuration
Add multicast=mcast_address (e.g. multicast=01:00:5e:01:02:03) in the port
section
- Through command line
run enable multicast port_id mcast_address (e.g. enable multicast 1 01:00:5e:01:02:03)
IGMP join message is sent unsollicited through command line:
join igmp core_id task_id ip (e.g. join igmp 1 0 224.1.1.3)
To enable swap answering IGMP Query (w/ IGMP Join)
- Through configuration
Add igmp ipv4=ip_address within the core/task section
- Through command line
join igmp core_id task_id ip (e.g. join igmp 1 0 224.1.1.3)
(this will 1st initiate an unsollicated join, then answer any subsequent query)
UDP/TCP packets received on a multicast address (224.0.0.0 => 239.255.255.255) are discarded
To stop sending responses to IGMP query:
leave igmp core_id task_id
Change-Id: I3808ccabf3b38b5a1e10e1b044db63aa05bcd7b5
Signed-off-by: Xavier Simonart <xavier.simonart@intel.com>
Diffstat (limited to 'VNFs/DPPD-PROX/prox_args.c')
-rw-r--r-- | VNFs/DPPD-PROX/prox_args.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/VNFs/DPPD-PROX/prox_args.c b/VNFs/DPPD-PROX/prox_args.c index b99796b7..df69f979 100644 --- a/VNFs/DPPD-PROX/prox_args.c +++ b/VNFs/DPPD-PROX/prox_args.c @@ -534,6 +534,17 @@ static int get_port_cfg(unsigned sindex, char *str, void *data) } cfg->promiscuous = val; } + else if (STR_EQ(str, "multicast")) { + uint32_t val; + if (cfg->nb_mc_addr >= NB_MCAST_ADDR) { + plog_err("too many multicast addresses\n"); + return -1; + } + if (parse_mac(&cfg->mc_addr[cfg->nb_mc_addr], pkey)) { + return -1; + } + cfg->nb_mc_addr++ ; + } else if (STR_EQ(str, "lsc")) { cfg->lsc_set_explicitely = 1; uint32_t val; @@ -856,9 +867,6 @@ static int get_core_cfg(unsigned sindex, char *str, void *data) if (STR_EQ(str, "fast path handle arp")) { return parse_flag(&targ->runtime_flags, TASK_FP_HANDLE_ARP, pkey); } - if (STR_EQ(str, "multiple arp")) { - return parse_flag(&targ->flags, TASK_MULTIPLE_MAC, pkey); - } /* Using tx port name, only a _single_ port can be assigned to a task. */ if (STR_EQ(str, "tx port")) { @@ -1356,6 +1364,9 @@ static int get_core_cfg(unsigned sindex, char *str, void *data) targ->flags |= TASK_ARG_SRC_MAC_SET; return 0; } + if (STR_EQ(str, "igmp ipv4")) { /* IGMP Group */ + return parse_ip(&targ->igmp_address, pkey); + } if (STR_EQ(str, "gateway ipv4")) { /* Gateway IP address used when generating */ if ((targ->flags & TASK_ARG_L3) == 0) plog_warn("gateway ipv4 configured but L3 sub mode not enabled\n"); |