From 7df4c681678612d196b4e1eec24963d181fdb28a Mon Sep 17 00:00:00 2001 From: Kevin Darbyshire-Bryant Date: Sun, 5 Apr 2020 17:18:23 +0100 Subject: [PATCH] drop runtime old kernel support Signed-off-by: Kevin Darbyshire-Bryant --- src/dnsmasq.c | 4 ---- src/dnsmasq.h | 5 +--- src/ipset.c | 64 ++++----------------------------------------------- src/netlink.c | 3 +-- src/util.c | 19 --------------- 5 files changed, 6 insertions(+), 89 deletions(-) --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -95,10 +95,6 @@ int main (int argc, char **argv) read_opts(argc, argv, compile_opts); -#ifdef HAVE_LINUX_NETWORK - daemon->kernel_version = kernel_version(); -#endif - if (daemon->edns_pktsz < PACKETSZ) daemon->edns_pktsz = PACKETSZ; --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1112,7 +1112,7 @@ extern struct daemon { int inotifyfd; #endif #if defined(HAVE_LINUX_NETWORK) - int netlinkfd, kernel_version; + int netlinkfd; #elif defined(HAVE_BSD_NETWORK) int dhcp_raw_fd, dhcp_icmp_fd, routefd; #endif @@ -1292,9 +1292,6 @@ int read_write(int fd, unsigned char *pa void close_fds(long max_fd, int spare1, int spare2, int spare3); int wildcard_match(const char* wildcard, const char* match); int wildcard_matchn(const char* wildcard, const char* match, int num); -#ifdef HAVE_LINUX_NETWORK -int kernel_version(void); -#endif /* log.c */ void die(char *message, char *arg1, int exit_code) ATTRIBUTE_NORETURN; --- a/src/ipset.c +++ b/src/ipset.c @@ -70,7 +70,7 @@ struct my_nfgenmsg { #define NL_ALIGN(len) (((len)+3) & ~(3)) static const struct sockaddr_nl snl = { .nl_family = AF_NETLINK }; -static int ipset_sock, old_kernel; +static int ipset_sock; static char *buffer; static inline void add_attr(struct nlmsghdr *nlh, uint16_t type, size_t len, const void *data) @@ -85,12 +85,7 @@ static inline void add_attr(struct nlmsg void ipset_init(void) { - old_kernel = (daemon->kernel_version < KERNEL_VERSION(2,6,32)); - - if (old_kernel && (ipset_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) != -1) - return; - - if (!old_kernel && + if ( (buffer = safe_malloc(BUFF_SZ)) && (ipset_sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_NETFILTER)) != -1 && (bind(ipset_sock, (struct sockaddr *)&snl, sizeof(snl)) != -1)) @@ -147,65 +142,14 @@ static int new_add_to_ipset(const char * return errno == 0 ? 0 : -1; } - -static int old_add_to_ipset(const char *setname, const union all_addr *ipaddr, int remove) -{ - socklen_t size; - struct ip_set_req_adt_get { - unsigned op; - unsigned version; - union { - char name[IPSET_MAXNAMELEN]; - uint16_t index; - } set; - char typename[IPSET_MAXNAMELEN]; - } req_adt_get; - struct ip_set_req_adt { - unsigned op; - uint16_t index; - uint32_t ip; - } req_adt; - - if (strlen(setname) >= sizeof(req_adt_get.set.name)) - { - errno = ENAMETOOLONG; - return -1; - } - - req_adt_get.op = 0x10; - req_adt_get.version = 3; - strcpy(req_adt_get.set.name, setname); - size = sizeof(req_adt_get); - if (getsockopt(ipset_sock, SOL_IP, 83, &req_adt_get, &size) < 0) - return -1; - req_adt.op = remove ? 0x102 : 0x101; - req_adt.index = req_adt_get.set.index; - req_adt.ip = ntohl(ipaddr->addr4.s_addr); - if (setsockopt(ipset_sock, SOL_IP, 83, &req_adt, sizeof(req_adt)) < 0) - return -1; - - return 0; -} - - - int add_to_ipset(const char *setname, const union all_addr *ipaddr, int flags, int remove) { int ret = 0, af = AF_INET; if (flags & F_IPV6) - { af = AF_INET6; - /* old method only supports IPv4 */ - if (old_kernel) - { - errno = EAFNOSUPPORT ; - ret = -1; - } - } - - if (ret != -1) - ret = old_kernel ? old_add_to_ipset(setname, ipaddr, remove) : new_add_to_ipset(setname, ipaddr, af, remove); + + ret = new_add_to_ipset(setname, ipaddr, af, remove); if (ret == -1) my_syslog(LOG_ERR, _("failed to update ipset %s: %s"), setname, strerror(errno)); --- a/src/netlink.c +++ b/src/netlink.c @@ -92,8 +92,7 @@ char *netlink_init(void) iov.iov_len = 100; iov.iov_base = safe_malloc(iov.iov_len); - if (daemon->kernel_version >= KERNEL_VERSION(2,6,30) && - setsockopt(daemon->netlinkfd, SOL_NETLINK, NETLINK_NO_ENOBUFS, &opt, sizeof(opt)) == -1) + if (setsockopt(daemon->netlinkfd, SOL_NETLINK, NETLINK_NO_ENOBUFS, &opt, sizeof(opt)) == -1) return _("warning: failed to set NETLINK_NO_ENOBUFS on netlink socket"); return NULL; --- a/src/util.c +++ b/src/util.c @@ -786,22 +786,3 @@ int wildcard_matchn(const char* wildcard return (!num) || (*wildcard == *match); } - -#ifdef HAVE_LINUX_NETWORK -int kernel_version(void) -{ - struct utsname utsname; - int version; - char *split; - - if (uname(&utsname) < 0) - die(_("failed to find kernel version: %s"), NULL, EC_MISC); - - split = strtok(utsname.release, "."); - version = (split ? atoi(split) : 0); - split = strtok(NULL, "."); - version = version * 256 + (split ? atoi(split) : 0); - split = strtok(NULL, "."); - return version * 256 + (split ? atoi(split) : 0); -} -#endif