summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2019-06-04 22:29:39 -0700
committerDamjan Marion <dmarion@me.com>2019-06-06 20:54:37 +0000
commit7d2420f97fae1a535428b756139a910fc9a120e3 (patch)
tree26e41bc7688705c9684f9bef280a3aa4cfa45473
parent6c36ca545bbd6f65937a4ec0de55614cf7223690 (diff)
avf: enable promiscuous mode
In order to receive multicast packets from the VF interface, promiscuos mode must be enable. Type: fix Fixes: b4ff07a Change-Id: I549bc37a05895d3355f2832c200e9262c95a27b5 Signed-off-by: Steven Luong <sluong@cisco.com> (cherry picked from commit 607a23a1753ee8dc7e9150f09bb376553ed62639)
-rw-r--r--src/plugins/avf/README.md7
-rw-r--r--src/plugins/avf/device.c2
-rw-r--r--src/plugins/avf/virtchnl.h10
3 files changed, 18 insertions, 1 deletions
diff --git a/src/plugins/avf/README.md b/src/plugins/avf/README.md
index d1a8416621a..0c7d555775e 100644
--- a/src/plugins/avf/README.md
+++ b/src/plugins/avf/README.md
@@ -75,6 +75,13 @@ setup 0000:3b:00.0 00:11:22:33:44:00
setup 0000:3b:00.1 00:11:22:33:44:01
```
+### Promisc mode
+In cases when interface is used in the L2 mode or promisc mode is needed for some other reason,
+trust needs to be set to "on" using the linux "ip link" utility.
+```
+ip link set dev <PF inteface name> vf <VF id> trust on
+```
+
### Interface Creation
Interfaces can be dynamically created by using following CLI:
```
diff --git a/src/plugins/avf/device.c b/src/plugins/avf/device.c
index 7d01149a1a0..e4c49da8fa0 100644
--- a/src/plugins/avf/device.c
+++ b/src/plugins/avf/device.c
@@ -561,7 +561,7 @@ avf_config_promisc_mode (vlib_main_t * vm, avf_device_t * ad)
virtchnl_promisc_info_t pi = { 0 };
pi.vsi_id = ad->vsi_id;
- pi.flags = 1;
+ pi.flags = FLAG_VF_UNICAST_PROMISC | FLAG_VF_MULTICAST_PROMISC;
return avf_send_to_pf (vm, ad, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE, &pi,
sizeof (virtchnl_promisc_info_t), 0, 0);
}
diff --git a/src/plugins/avf/virtchnl.h b/src/plugins/avf/virtchnl.h
index 1bdecbcdc8f..493384cb1d7 100644
--- a/src/plugins/avf/virtchnl.h
+++ b/src/plugins/avf/virtchnl.h
@@ -21,6 +21,16 @@
#define VIRTCHNL_VERSION_MAJOR 1
#define VIRTCHNL_VERSION_MINOR 1
+#define foreach_avf_promisc_flags \
+ _(0, UNICAST_PROMISC, "unicast") \
+ _(1, MULTICAST_PROMISC, "multicast")
+
+enum
+{
+#define _(a, b, c) FLAG_VF_ ##b = (1 << a),
+ foreach_avf_promisc_flags
+#undef _
+};
#define AVFINT_DYN_CTLN(x) (0x00003800 + (0x4 * x))
#define AVFINT_ICR0 0x00004800