summaryrefslogtreecommitdiff
path: root/bfdd/linux.c
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@opensourcerouting.org>2018-08-29 15:17:49 -0300
committerRafael Zalamena <rzalamena@opensourcerouting.org>2018-09-03 10:41:33 -0300
commit2f11c53f550a07970b73344985202d5ade4e353a (patch)
tree865eaa814ae6878e853ff024c7386355273b6b4c /bfdd/linux.c
parent40675ea908eec9f3735219a44617371519f41d67 (diff)
bfdd: use UDP sockets instead of raw
Avoid all complexities of handling ethernet/IP/UDP headers and just use UDP sockets: let the OS kernel handle this task. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
Diffstat (limited to 'bfdd/linux.c')
-rw-r--r--bfdd/linux.c72
1 files changed, 0 insertions, 72 deletions
diff --git a/bfdd/linux.c b/bfdd/linux.c
index 442958ead9..e260851ddb 100644
--- a/bfdd/linux.c
+++ b/bfdd/linux.c
@@ -23,35 +23,8 @@
#ifdef BFD_LINUX
-/* XXX: fix compilation error on Ubuntu 16.04 or older. */
-#ifndef _UAPI_IPV6_H
-#define _UAPI_IPV6_H
-#endif /* _UAPI_IPV6_H */
-
-#include <linux/filter.h>
-#include <linux/if_packet.h>
-
-#include <netinet/if_ether.h>
-
-#include <net/if.h>
-#include <sys/ioctl.h>
-
#include "bfd.h"
-/* Berkeley Packet filter code to filter out BFD Echo packets.
- * tcpdump -dd "(udp dst port 3785)"
- */
-static struct sock_filter bfd_echo_filter[] = {
- {0x28, 0, 0, 0x0000000c}, {0x15, 0, 4, 0x000086dd},
- {0x30, 0, 0, 0x00000014}, {0x15, 0, 11, 0x00000011},
- {0x28, 0, 0, 0x00000038}, {0x15, 8, 9, 0x00000ec9},
- {0x15, 0, 8, 0x00000800}, {0x30, 0, 0, 0x00000017},
- {0x15, 0, 6, 0x00000011}, {0x28, 0, 0, 0x00000014},
- {0x45, 4, 0, 0x00001fff}, {0xb1, 0, 0, 0x0000000e},
- {0x48, 0, 0, 0x00000010}, {0x15, 0, 1, 0x00000ec9},
- {0x6, 0, 0, 0x0000ffff}, {0x6, 0, 0, 0x00000000},
-};
-
/*
* Definitions.
@@ -114,30 +87,6 @@ void fetch_portname_from_ifindex(int ifindex, char *ifname, size_t ifnamelen)
ifr.ifr_name, ifname);
}
-int ptm_bfd_echo_sock_init(void)
-{
- int s;
- struct sock_fprog bpf = {.len = sizeof(bfd_echo_filter)
- / sizeof(bfd_echo_filter[0]),
- .filter = bfd_echo_filter};
-
- s = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
- if (s == -1) {
- log_error("echo-socket: creation failure: %s", strerror(errno));
- return -1;
- }
-
- if (setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, &bpf, sizeof(bpf))
- == -1) {
- log_error("echo-socket: setsockopt(SO_ATTACH_FILTER): %s",
- strerror(errno));
- close(s);
- return -1;
- }
-
- return s;
-}
-
int bp_bind_dev(int sd __attribute__((__unused__)),
const char *dev __attribute__((__unused__)))
{
@@ -158,25 +107,4 @@ int bp_bind_dev(int sd __attribute__((__unused__)),
return 0;
}
-uint16_t udp4_checksum(struct iphdr *iph, uint8_t *buf, int len)
-{
- char *ptr;
- struct udp_psuedo_header pudp_hdr;
- uint16_t csum;
-
- pudp_hdr.saddr = iph->saddr;
- pudp_hdr.daddr = iph->daddr;
- pudp_hdr.reserved = 0;
- pudp_hdr.protocol = iph->protocol;
- pudp_hdr.len = htons(len);
-
- ptr = XMALLOC(MTYPE_BFDD_TMP, UDP_PSUEDO_HDR_LEN + len);
- memcpy(ptr, &pudp_hdr, UDP_PSUEDO_HDR_LEN);
- memcpy(ptr + UDP_PSUEDO_HDR_LEN, buf, len);
-
- csum = checksum((uint16_t *)ptr, UDP_PSUEDO_HDR_LEN + len);
- XFREE(MTYPE_BFDD_TMP, ptr);
- return csum;
-}
-
#endif /* BFD_LINUX */