summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX/prox_args.c
diff options
context:
space:
mode:
authorXavier Simonart <xavier.simonart@intel.com>2019-06-24 17:01:54 +0200
committerXavier Simonart <xavier.simonart@intel.com>2019-10-09 19:09:34 +0200
commit48f8c3d212644a33dd0abaaa1a0c71d4decaafdf (patch)
tree515043d3dc43025bb5ce5e6cb842afd68ae891e9 /VNFs/DPPD-PROX/prox_args.c
parent4cc4dabe80eb7d19c20920b7ec20899d6a76a1dd (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.c17
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");