diff options
author | Amitay Isaacs <amitay@gmail.com> | 2016-03-03 14:17:40 +1100 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2016-03-04 12:58:50 +0100 |
commit | f5b6a5b13406c245ab9cc8c1699483af9eb21f88 (patch) | |
tree | df2cf5f1e6443d6aa86064d72015b645caa7f460 /ctdb/common/system_linux.c | |
parent | b1b70c136c68bb7cac0c68a96fa064e0b29bbfa6 (diff) | |
download | samba-f5b6a5b13406c245ab9cc8c1699483af9eb21f88.tar.gz |
ctdb-common: For AF_PACKET socket types, protocol is in network order
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11770
From man page of packet(7):
protocol is the IEEE 802.3
protocol number in network byte order. See the <linux/if_ether.h>
include file for a list of allowed protocols. When protocol is set to
htons(ETH_P_ALL), then all protocols are received.
Protocol argument was changed from network order to host order wrongly
in commit 9f8395cb7d49b63a82f75bf504f5f83920102b29.
Specifying "protocol" field to socket(AF_PACKET, ...) call only affects
the packets that are recevied. So use protocol = 0 when sending raw
packets.
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Fri Mar 4 12:58:50 CET 2016 on sn-devel-144
Diffstat (limited to 'ctdb/common/system_linux.c')
-rw-r--r-- | ctdb/common/system_linux.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/ctdb/common/system_linux.c b/ctdb/common/system_linux.c index d523617086e..6d016993df1 100644 --- a/ctdb/common/system_linux.c +++ b/ctdb/common/system_linux.c @@ -100,7 +100,7 @@ int ctdb_sys_send_arp(const ctdb_sock_addr *addr, const char *iface) switch (addr->ip.sin_family) { case AF_INET: - s = socket(AF_PACKET, SOCK_RAW, ETHERTYPE_ARP); + s = socket(AF_PACKET, SOCK_RAW, 0); if (s == -1){ DEBUG(DEBUG_CRIT,(__location__ " failed to open raw socket\n")); return -1; @@ -194,7 +194,7 @@ int ctdb_sys_send_arp(const ctdb_sock_addr *addr, const char *iface) close(s); break; case AF_INET6: - s = socket(AF_PACKET, SOCK_RAW, ETHERTYPE_ARP); + s = socket(AF_PACKET, SOCK_RAW, 0); if (s == -1){ DEBUG(DEBUG_CRIT,(__location__ " failed to open raw socket\n")); return -1; @@ -460,7 +460,7 @@ int ctdb_sys_open_capture_socket(const char *iface, void **private_data) int s; /* Open a socket to capture all traffic */ - s = socket(AF_PACKET, SOCK_RAW, ETH_P_ALL); + s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (s == -1) { DEBUG(DEBUG_CRIT,(__location__ " failed to open raw socket\n")); return -1; |