Code Review
/
vpp.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
review
|
tree
raw
|
patch
|
inline
| side by side (parent:
49c13c7
)
At AF_PACKET socket create, do intf bind before rx ring cfg to avoid receiving pkts...
20/11120/2
author
Chaoyu Jin
<chjin@cisco.com>
Tue, 13 Mar 2018 14:37:41 +0000
(07:37 -0700)
committer
Damjan Marion
<dmarion.lists@gmail.com>
Wed, 14 Mar 2018 07:49:39 +0000
(07:49 +0000)
Change-Id: Ie40ee9129edaac717e716b469f4d10f3c29a4932
Signed-off-by: Chaoyu Jin <chjin@cisco.com>
src/vnet/devices/af_packet/af_packet.c
patch
|
blob
|
history
diff --git
a/src/vnet/devices/af_packet/af_packet.c
b/src/vnet/devices/af_packet/af_packet.c
index
2a13510
..
e286ae9
100644
(file)
--- a/
src/vnet/devices/af_packet/af_packet.c
+++ b/
src/vnet/devices/af_packet/af_packet.c
@@
-144,6
+144,18
@@
create_packet_v2_sock (int host_if_index, tpacket_req_t * rx_req,
goto error;
}
goto error;
}
+ /* bind before rx ring is cfged so we don't receive packets from other interfaces */
+ memset (&sll, 0, sizeof (sll));
+ sll.sll_family = PF_PACKET;
+ sll.sll_protocol = htons (ETH_P_ALL);
+ sll.sll_ifindex = host_if_index;
+ if ((err = bind (*fd, (struct sockaddr *) &sll, sizeof (sll))) < 0)
+ {
+ DBG_SOCK ("Failed to bind rx packet socket (error %d)", err);
+ ret = VNET_API_ERROR_SYSCALL_ERROR_1;
+ goto error;
+ }
+
if ((err =
setsockopt (*fd, SOL_PACKET, PACKET_VERSION, &ver, sizeof (ver))) < 0)
{
if ((err =
setsockopt (*fd, SOL_PACKET, PACKET_VERSION, &ver, sizeof (ver))) < 0)
{
@@
-187,18
+199,6
@@
create_packet_v2_sock (int host_if_index, tpacket_req_t * rx_req,
goto error;
}
goto error;
}
- memset (&sll, 0, sizeof (sll));
- sll.sll_family = PF_PACKET;
- sll.sll_protocol = htons (ETH_P_ALL);
- sll.sll_ifindex = host_if_index;
-
- if ((err = bind (*fd, (struct sockaddr *) &sll, sizeof (sll))) < 0)
- {
- DBG_SOCK ("Failed to bind rx packet socket (error %d)", err);
- ret = VNET_API_ERROR_SYSCALL_ERROR_1;
- goto error;
- }
-
return 0;
error:
if (*fd >= 0)
return 0;
error:
if (*fd >= 0)