From ef941daab94372410d79dc3950e7e7470563f713 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Mar 2019 08:12:24 +0000 Subject: [PATCH] ping, ninfod: merge network information constants Both ninfod and ping -6 need the same definitions. Signed-off-by: Sami Kerola --- iputils_ni.h | 40 ++++++++++++++++++++++++++ ninfod/icmp6_nodeinfo.h | 47 ------------------------------ ninfod/ninfod.c | 5 ++-- ninfod/ninfod_addrs.c | 51 +++++++++++++++++---------------- ninfod/ninfod_core.c | 47 +++++++++++++++--------------- ninfod/ninfod_name.c | 7 +++-- ping.h | 34 +--------------------- ping6_common.c | 63 +++++++++++++++++++++-------------------- 8 files changed, 130 insertions(+), 164 deletions(-) create mode 100644 iputils_ni.h diff --git a/iputils_ni.h b/iputils_ni.h new file mode 100644 index 00000000..52b6b5fc --- /dev/null +++ b/iputils_ni.h @@ -0,0 +1,40 @@ +#ifndef IPUTILS_NI_H +#define IPUTILS_NI_H +/* + * Shared network information definitions. + */ +#include + +#define IPUTILS_NI_ICMP6_QUERY 139 +#define IPUTILS_NI_ICMP6_REPLY 140 + +/* NI Codes */ +#define IPUTILS_NI_QTYPE_NOOP 0 /* NOOP */ +#define IPUTILS_NI_QTYPE_DNSNAME 2 /* DNS Name */ +#define IPUTILS_NI_QTYPE_IPV6ADDR 3 /* IPv6 Addresses */ +#define IPUTILS_NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */ + +/* ICMP6 codes for NI Query */ +#define IPUTILS_NI_ICMP6_SUBJ_IPV6 0 /* Query Subject is an ipv6 address */ +#define IPUTILS_NI_ICMP6_SUBJ_FQDN 1 /* Query Subject is a Domain name */ +#define IPUTILS_NI_ICMP6_SUBJ_IPV4 2 /* Query Subject is an ipv4 address */ + +/* ICMP6 codes for NI Reply */ +#define IPUTILS_NI_ICMP6_SUCCESS 0 /* NI successful reply */ +#define IPUTILS_NI_ICMP6_REFUSED 1 /* NI request is refused */ +#define IPUTILS_NI_ICMP6_UNKNOWN 2 /* unknown Qtype */ + +/* Flags */ +#define IPUTILS_NI_IPV6_FLAG_TRUNCATE __constant_cpu_to_be16(0x0001) +#define IPUTILS_NI_IPV6_FLAG_ALL __constant_cpu_to_be16(0x0002) +#define IPUTILS_NI_IPV6_FLAG_COMPAT __constant_cpu_to_be16(0x0004) +#define IPUTILS_NI_IPV6_FLAG_LINKLOCAL __constant_cpu_to_be16(0x0008) +#define IPUTILS_NI_IPV6_FLAG_SITELOCAL __constant_cpu_to_be16(0x0010) +#define IPUTILS_NI_IPV6_FLAG_GLOBAL __constant_cpu_to_be16(0x0020) + +#define IPUTILS_NI_FQDN_VALIDTTL __constant_cpu_to_be16(0x0001) + +#define IPUTILS_NI_IPV4_FLAG_TRUNCATE IPUTILS_NI_IPV6_FLAG_TRUNCATE +#define IPUTILS_NI_IPV4_FLAG_ALL IPUTILS_NI_IPV6_FLAG_ALL + +#endif /* IPUTILS_NI_H */ diff --git a/ninfod/icmp6_nodeinfo.h b/ninfod/icmp6_nodeinfo.h index 4793f7ae..66f23834 100644 --- a/ninfod/icmp6_nodeinfo.h +++ b/ninfod/icmp6_nodeinfo.h @@ -44,51 +44,4 @@ struct icmp6_nodeinfo { #define ni_flags icmp6_ni_hdr.icmp6_data16[1] #define ni_nonce icmp6_ni_nonce -/* ICMP6 types */ -#define ICMP6_NI_QUERY 139 -#define ICMP6_NI_REPLY 140 - -/* ICMP6 codes for NI Query */ -#define ICMP6_NI_SUBJ_IPV6 0 /* Query Subject is an ipv6 address */ -#define ICMP6_NI_SUBJ_FQDN 1 /* Query Subject is a Domain name */ -#define ICMP6_NI_SUBJ_IPV4 2 /* Query Subject is an ipv4 address */ - -/* ICMP6 codes for NI Reply */ -#define ICMP6_NI_SUCCESS 0 /* NI successful reply */ -#define ICMP6_NI_REFUSED 1 /* NI request is refused */ -#define ICMP6_NI_UNKNOWN 2 /* unknown Qtype */ - -/* NI Codes */ -#define NI_QTYPE_NOOP 0 /* NOOP */ -#define NI_QTYPE_DNSNAME 2 /* DNS Name */ -#define NI_QTYPE_NODEADDR 3 /* Node Addresses */ -#define NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */ - -/* NI Flags */ -#if WORDS_BIGENDIAN -#define NI_FQDN_FLAG_VALIDTTL 0x1 -#else -#define NI_FQDN_FLAG_VALIDTTL 0x0100 -#endif - -#if WORDS_BIGENDIAN -#define NI_NODEADDR_FLAG_TRUNCATE 0x1 -#define NI_NODEADDR_FLAG_ALL 0x2 -#define NI_NODEADDR_FLAG_COMPAT 0x4 -#define NI_NODEADDR_FLAG_LINKLOCAL 0x8 -#define NI_NODEADDR_FLAG_SITELOCAL 0x10 -#define NI_NODEADDR_FLAG_GLOBAL 0x20 -#else -#define NI_NODEADDR_FLAG_TRUNCATE 0x0100 -#define NI_NODEADDR_FLAG_ALL 0x0200 -#define NI_NODEADDR_FLAG_COMPAT 0x0400 -#define NI_NODEADDR_FLAG_LINKLOCAL 0x0800 -#define NI_NODEADDR_FLAG_SITELOCAL 0x1000 -#define NI_NODEADDR_FLAG_GLOBAL 0x2000 #endif - -#define NI_IPV4ADDR_FLAG_TRUNCATE NI_NODEADDR_FLAG_TRUNCATE -#define NI_IPV4ADDR_FLAG_ALL NI_NODEADDR_FLAG_ALL - -#endif - diff --git a/ninfod/ninfod.c b/ninfod/ninfod.c index 360efcdc..badbf809 100644 --- a/ninfod/ninfod.c +++ b/ninfod/ninfod.c @@ -118,6 +118,7 @@ #endif #include "iputils_common.h" +#include "iputils_ni.h" #include "ninfod.h" /* Variables */ @@ -221,7 +222,7 @@ __inline__ static int init_sock(int socket) struct icmp6_filter filter; ICMP6_FILTER_SETBLOCKALL(&filter); - ICMP6_FILTER_SETPASS(ICMP6_NI_QUERY, &filter); + ICMP6_FILTER_SETPASS(IPUTILS_NI_ICMP6_QUERY, &filter); if (setsockopt(socket, IPPROTO_ICMPV6, ICMP6_FILTER, &filter, sizeof(filter)) < 0) { @@ -726,7 +727,7 @@ int main (int argc, char **argv) icmph->icmp6_type, icmph->icmp6_code, ntohs(icmph->icmp6_cksum)); - if (icmph->icmp6_type != ICMP6_NI_QUERY) { + if (icmph->icmp6_type != IPUTILS_NI_ICMP6_QUERY) { #if ENABLE_DEBUG DEBUG(LOG_WARNING, "Strange icmp type %d from %s\n", diff --git a/ninfod/ninfod_addrs.c b/ninfod/ninfod_addrs.c index d1ef74ef..c6bb9029 100644 --- a/ninfod/ninfod_addrs.c +++ b/ninfod/ninfod_addrs.c @@ -110,6 +110,7 @@ # include #endif +#include "iputils_ni.h" #include "ninfod.h" #include "ni_ifaddrs.h" @@ -128,13 +129,13 @@ int filter_ipv6addr(const struct in6_addr *ifaddr, unsigned int flags) return 1; } else if (IN6_IS_ADDR_V4COMPAT(ifaddr) || IN6_IS_ADDR_V4MAPPED(ifaddr)) { - return !(flags & NI_NODEADDR_FLAG_COMPAT); + return !(flags & IPUTILS_NI_IPV6_FLAG_COMPAT); } else if (IN6_IS_ADDR_LINKLOCAL(ifaddr)) { - return !(flags & NI_NODEADDR_FLAG_LINKLOCAL); + return !(flags & IPUTILS_NI_IPV6_FLAG_LINKLOCAL); } else if (IN6_IS_ADDR_SITELOCAL(ifaddr)) { - return !(flags & NI_NODEADDR_FLAG_SITELOCAL); + return !(flags & IPUTILS_NI_IPV6_FLAG_SITELOCAL); } - return !(flags & NI_NODEADDR_FLAG_GLOBAL); + return !(flags & IPUTILS_NI_IPV6_FLAG_GLOBAL); } int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS) @@ -207,7 +208,7 @@ int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS) unsigned int addrs0 = 0, paddrs0 = 0; unsigned int addrs, paddrs = 0, daddrs = 0; - flags &= ~NI_NODEADDR_FLAG_TRUNCATE; + flags &= ~IPUTILS_NI_IPV6_FLAG_TRUNCATE; /* pass 1: count addresses and preferred addresses to be returned */ for (ifa = ifa0; ifa; ifa = ifa->ifa_next) { @@ -215,14 +216,14 @@ int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS) continue; if (ifa->ifa_flags & (IFA_F_TENTATIVE|IFA_F_SECONDARY)) continue; - if (!(flags & NI_NODEADDR_FLAG_ALL) && + if (!(flags & IPUTILS_NI_IPV6_FLAG_ALL) && ifa->ifa_ifindex != ifindex) continue; if (filter_ipv6addr((struct in6_addr *)ifa->ifa_addr, flags)) continue; if (addrs0 + 1 >= ((MAX_REPLY_SIZE - sizeof(struct icmp6_nodeinfo)) / (sizeof(uint32_t) + sizeof(struct in6_addr)))) { - flags |= ~NI_NODEADDR_FLAG_TRUNCATE; + flags |= ~IPUTILS_NI_IPV6_FLAG_TRUNCATE; break; } @@ -231,21 +232,21 @@ int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS) paddrs0++; } - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_SUCCESS; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_SUCCESS; p->reply.ni_cksum = 0; - p->reply.ni_qtype = htons(NI_QTYPE_NODEADDR); - p->reply.ni_flags = flags&(NI_NODEADDR_FLAG_COMPAT| - NI_NODEADDR_FLAG_LINKLOCAL| - NI_NODEADDR_FLAG_SITELOCAL| - NI_NODEADDR_FLAG_GLOBAL); + p->reply.ni_qtype = htons(IPUTILS_NI_QTYPE_IPV6ADDR); + p->reply.ni_flags = flags&(IPUTILS_NI_IPV6_FLAG_COMPAT| + IPUTILS_NI_IPV6_FLAG_LINKLOCAL| + IPUTILS_NI_IPV6_FLAG_SITELOCAL| + IPUTILS_NI_IPV6_FLAG_GLOBAL); /* pass 2: store addresses */ p->replydatalen = (sizeof(uint32_t)+sizeof(struct in6_addr)) * addrs0; p->replydata = p->replydatalen ? malloc(p->replydatalen) : NULL; if (p->replydatalen && !p->replydata) { - p->reply.ni_flags |= NI_NODEADDR_FLAG_TRUNCATE; + p->reply.ni_flags |= IPUTILS_NI_IPV6_FLAG_TRUNCATE; addrs0 = paddrs0 = 0; } @@ -259,7 +260,7 @@ int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS) continue; if (ifa->ifa_flags & (IFA_F_TENTATIVE|IFA_F_SECONDARY)) continue; - if (!(flags & NI_NODEADDR_FLAG_ALL) && + if (!(flags & IPUTILS_NI_IPV6_FLAG_ALL) && ((subj_if && *subj_if) ? (ifa->ifa_ifindex != *subj_if) : (ifa->ifa_ifindex != p->pktinfo.ipi6_ifindex))) continue; @@ -351,7 +352,7 @@ int pr_nodeinfo_ipv4addr(CHECKANDFILL_ARGS) unsigned int addrs0 = 0, paddrs0 = 0; unsigned int addrs, paddrs = 0, daddrs = 0; - flags &= ~NI_IPV4ADDR_FLAG_TRUNCATE; + flags &= ~IPUTILS_NI_IPV4_FLAG_TRUNCATE; /* pass 1: count addresses and preferred addresses to be returned */ for (ifa = ifa0; ifa; ifa = ifa->ifa_next) { @@ -361,13 +362,13 @@ int pr_nodeinfo_ipv4addr(CHECKANDFILL_ARGS) if (ifa->ifa_flags & (IFA_F_TENTATIVE)) continue; #endif - if (!(flags & NI_NODEADDR_FLAG_ALL) && + if (!(flags & IPUTILS_NI_IPV6_FLAG_ALL) && ((subj_if && *subj_if) ? (ifa->ifa_ifindex != *subj_if) : (ifa->ifa_ifindex != p->pktinfo.ipi6_ifindex))) continue; if (addrs0 + 1 >= ((MAX_REPLY_SIZE - sizeof(struct icmp6_nodeinfo)) / (sizeof(uint32_t) + sizeof(struct in_addr)))) { - flags |= NI_IPV4ADDR_FLAG_TRUNCATE; + flags |= IPUTILS_NI_IPV4_FLAG_TRUNCATE; break; } @@ -376,18 +377,18 @@ int pr_nodeinfo_ipv4addr(CHECKANDFILL_ARGS) paddrs0++; } - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_SUCCESS; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_SUCCESS; p->reply.ni_cksum = 0; - p->reply.ni_qtype = htons(NI_QTYPE_IPV4ADDR); - p->reply.ni_flags = flags & NI_IPV4ADDR_FLAG_ALL; + p->reply.ni_qtype = htons(IPUTILS_NI_QTYPE_IPV4ADDR); + p->reply.ni_flags = flags & IPUTILS_NI_IPV4_FLAG_ALL; /* pass 2: store addresses */ p->replydatalen = (sizeof(uint32_t)+sizeof(struct in_addr)) * addrs0; p->replydata = addrs0 ? malloc(p->replydatalen) : NULL; if (p->replydatalen && !p->replydata) { - p->reply.ni_flags |= NI_NODEADDR_FLAG_TRUNCATE; + p->reply.ni_flags |= IPUTILS_NI_IPV6_FLAG_TRUNCATE; addrs0 = paddrs0 = 0; } @@ -403,7 +404,7 @@ int pr_nodeinfo_ipv4addr(CHECKANDFILL_ARGS) if (ifa->ifa_flags & (IFA_F_TENTATIVE)) continue; #endif - if (!(flags & NI_NODEADDR_FLAG_ALL) && + if (!(flags & IPUTILS_NI_IPV6_FLAG_ALL) && (ifa->ifa_ifindex != ifindex)) continue; diff --git a/ninfod/ninfod_core.c b/ninfod/ninfod_core.c index 8d6c3d91..f7c0215e 100644 --- a/ninfod/ninfod_core.c +++ b/ninfod/ninfod_core.c @@ -103,6 +103,7 @@ #endif #include +#include "iputils_ni.h" #include "ninfod.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) @@ -123,20 +124,20 @@ struct subjinfo { }; static struct subjinfo subjinfo_table [] = { - [ICMP6_NI_SUBJ_IPV6] = { - .code = ICMP6_NI_SUBJ_IPV6, + [IPUTILS_NI_ICMP6_SUBJ_IPV6] = { + .code = IPUTILS_NI_ICMP6_SUBJ_IPV6, .name = "IPv6", //.init = init_nodeinfo_ipv6addr, .checksubj = pr_nodeinfo_ipv6addr, }, - [ICMP6_NI_SUBJ_FQDN] = { - .code = ICMP6_NI_SUBJ_FQDN, + [IPUTILS_NI_ICMP6_SUBJ_FQDN] = { + .code = IPUTILS_NI_ICMP6_SUBJ_FQDN, .name = "FQDN", //.init = init_nodeinfo_nodename, .checksubj = pr_nodeinfo_nodename, }, - [ICMP6_NI_SUBJ_IPV4] = { - .code = ICMP6_NI_SUBJ_IPV4, + [IPUTILS_NI_ICMP6_SUBJ_IPV4] = { + .code = IPUTILS_NI_ICMP6_SUBJ_IPV4, .name = "IPv4", //.init = init_nodeinfo_ipv4addr, .checksubj = pr_nodeinfo_ipv4addr, @@ -169,25 +170,25 @@ struct qtypeinfo { }; static struct qtypeinfo qtypeinfo_table[] = { - [NI_QTYPE_NOOP] = { - .qtype = NI_QTYPE_NOOP, + [IPUTILS_NI_QTYPE_NOOP] = { + .qtype = IPUTILS_NI_QTYPE_NOOP, .name = "NOOP", .getreply = pr_nodeinfo_noop, }, - [NI_QTYPE_DNSNAME] = { - .qtype = NI_QTYPE_DNSNAME, + [IPUTILS_NI_QTYPE_DNSNAME] = { + .qtype = IPUTILS_NI_QTYPE_DNSNAME, .name = "DnsName", .getreply = pr_nodeinfo_nodename, .init = init_nodeinfo_nodename, }, - [NI_QTYPE_NODEADDR] = { - .qtype = NI_QTYPE_NODEADDR, + [IPUTILS_NI_QTYPE_IPV6ADDR] = { + .qtype = IPUTILS_NI_QTYPE_IPV6ADDR, .name = "NodeAddr", .getreply = pr_nodeinfo_ipv6addr, .init = init_nodeinfo_ipv6addr, }, - [NI_QTYPE_IPV4ADDR] = { - .qtype = NI_QTYPE_IPV4ADDR, + [IPUTILS_NI_QTYPE_IPV4ADDR] = { + .qtype = IPUTILS_NI_QTYPE_IPV4ADDR, .name = "IPv4Addr", .getreply = pr_nodeinfo_ipv4addr, .init = init_nodeinfo_ipv4addr, @@ -229,10 +230,10 @@ int pr_nodeinfo_noop(CHECKANDFILL_ARGS_3) } if (reply) { - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_SUCCESS; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_SUCCESS; p->reply.ni_cksum = 0; - p->reply.ni_qtype = htons(NI_QTYPE_NOOP); + p->reply.ni_qtype = htons(IPUTILS_NI_QTYPE_NOOP); p->reply.ni_flags = flags; } @@ -249,8 +250,8 @@ int pr_nodeinfo_unknown(CHECKANDFILL_ARGS_1) if (!reply) return -1; /*???*/ - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_UNKNOWN; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_UNKNOWN; p->reply.ni_cksum = 0; //p->reply.ni_qtype = 0; p->reply.ni_flags = flags; @@ -267,8 +268,8 @@ int pr_nodeinfo_refused(CHECKANDFILL_ARGS_1) if (!reply) return -1; /*???*/ - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_REFUSED; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_REFUSED; p->reply.ni_cksum = 0; //p->reply.ni_qtype = 0; p->reply.ni_flags = flags; @@ -478,8 +479,8 @@ int pr_nodeinfo(struct packetcontext *p) /* Step 2: Check Subject Code */ switch(htons(query->ni_qtype)) { - case NI_QTYPE_NOOP: - if (query->ni_code != ICMP6_NI_SUBJ_FQDN) { + case IPUTILS_NI_QTYPE_NOOP: + if (query->ni_code != IPUTILS_NI_ICMP6_SUBJ_FQDN) { DEBUG(LOG_WARNING, "%s(): invalid/unknown code %u\n", __func__, query->ni_code); diff --git a/ninfod/ninfod_name.c b/ninfod/ninfod_name.c index d9d616e2..daf606dd 100644 --- a/ninfod/ninfod_name.c +++ b/ninfod/ninfod_name.c @@ -115,6 +115,7 @@ # include #endif +#include "iputils_ni.h" #include "ninfod.h" /* Hmm,,, */ @@ -350,10 +351,10 @@ int pr_nodeinfo_nodename(CHECKANDFILL_ARGS_2) if (reply) { uint32_t ttl = 0; - p->reply.ni_type = ICMP6_NI_REPLY; - p->reply.ni_code = ICMP6_NI_SUCCESS; + p->reply.ni_type = IPUTILS_NI_ICMP6_REPLY; + p->reply.ni_code = IPUTILS_NI_ICMP6_SUCCESS; p->reply.ni_cksum = 0; - p->reply.ni_qtype = htons(NI_QTYPE_DNSNAME); + p->reply.ni_qtype = htons(IPUTILS_NI_QTYPE_DNSNAME); p->reply.ni_flags = 0; p->replydatalen = nodenamelen ? sizeof(ttl)+nodenamelen : 0; diff --git a/ping.h b/ping.h index 33eae74e..56ea1d16 100644 --- a/ping.h +++ b/ping.h @@ -35,6 +35,7 @@ #endif #include "iputils_common.h" +#include "iputils_ni.h" #ifdef USE_IDN # include @@ -362,36 +363,3 @@ struct ni_hdr { #define ni_cksum ni_u.icmp6_cksum #define ni_qtype ni_u.icmp6_data16[0] #define ni_flags ni_u.icmp6_data16[1] - -/* Types */ -#ifndef ICMPV6_NI_QUERY -# define ICMPV6_NI_QUERY 139 -# define ICMPV6_NI_REPLY 140 -#endif - -/* Query Codes */ -#define NI_SUBJ_IPV6 0 -#define NI_SUBJ_NAME 1 -#define NI_SUBJ_IPV4 2 - -/* Reply Codes */ -#define NI_SUCCESS 0 -#define NI_REFUSED 1 -#define NI_UNKNOWN 2 - -/* Qtypes */ -#define NI_QTYPE_NOOP 0 -#define NI_QTYPE_NAME 2 -#define NI_QTYPE_IPV6ADDR 3 -#define NI_QTYPE_IPV4ADDR 4 - -/* Flags */ -#define NI_IPV6ADDR_F_TRUNCATE __constant_cpu_to_be16(0x0001) -#define NI_IPV6ADDR_F_ALL __constant_cpu_to_be16(0x0002) -#define NI_IPV6ADDR_F_COMPAT __constant_cpu_to_be16(0x0004) -#define NI_IPV6ADDR_F_LINKLOCAL __constant_cpu_to_be16(0x0008) -#define NI_IPV6ADDR_F_SITELOCAL __constant_cpu_to_be16(0x0010) -#define NI_IPV6ADDR_F_GLOBAL __constant_cpu_to_be16(0x0020) - -#define NI_IPV4ADDR_F_TRUNCATE NI_IPV6ADDR_F_TRUNCATE -#define NI_IPV4ADDR_F_ALL NI_IPV6ADDR_F_ALL diff --git a/ping6_common.c b/ping6_common.c index 9de3ecf5..1a764536 100644 --- a/ping6_common.c +++ b/ping6_common.c @@ -57,6 +57,7 @@ * if -N option is used, this program has to run SUID to ROOT or * with net_cap_raw enabled. */ +#include "iputils_ni.h" #include "ping.h" ping_func_set_st ping6_func_set = { @@ -142,15 +143,15 @@ struct niquery_option niquery_options[] = { NIQUERY_OPTION("name", 0, 0, niquery_option_name_handler), NIQUERY_OPTION("fqdn", 0, 0, niquery_option_name_handler), NIQUERY_OPTION("ipv6", 0, 0, niquery_option_ipv6_handler), - NIQUERY_OPTION("ipv6-all", 0, NI_IPV6ADDR_F_ALL, niquery_option_ipv6_flag_handler), - NIQUERY_OPTION("ipv6-compatible", 0, NI_IPV6ADDR_F_COMPAT, niquery_option_ipv6_flag_handler), - NIQUERY_OPTION("ipv6-linklocal", 0, NI_IPV6ADDR_F_LINKLOCAL, niquery_option_ipv6_flag_handler), - NIQUERY_OPTION("ipv6-sitelocal", 0, NI_IPV6ADDR_F_SITELOCAL, niquery_option_ipv6_flag_handler), - NIQUERY_OPTION("ipv6-global", 0, NI_IPV6ADDR_F_GLOBAL, niquery_option_ipv6_flag_handler), + NIQUERY_OPTION("ipv6-all", 0, IPUTILS_NI_IPV6_FLAG_ALL, niquery_option_ipv6_flag_handler), + NIQUERY_OPTION("ipv6-compatible", 0, IPUTILS_NI_IPV6_FLAG_COMPAT, niquery_option_ipv6_flag_handler), + NIQUERY_OPTION("ipv6-linklocal", 0, IPUTILS_NI_IPV6_FLAG_LINKLOCAL, niquery_option_ipv6_flag_handler), + NIQUERY_OPTION("ipv6-sitelocal", 0, IPUTILS_NI_IPV6_FLAG_SITELOCAL, niquery_option_ipv6_flag_handler), + NIQUERY_OPTION("ipv6-global", 0, IPUTILS_NI_IPV6_FLAG_GLOBAL, niquery_option_ipv6_flag_handler), NIQUERY_OPTION("ipv4", 0, 0, niquery_option_ipv4_handler), - NIQUERY_OPTION("ipv4-all", 0, NI_IPV4ADDR_F_ALL, niquery_option_ipv4_flag_handler), - NIQUERY_OPTION("subject-ipv6", 1, NI_SUBJ_IPV6, niquery_option_subject_addr_handler), - NIQUERY_OPTION("subject-ipv4", 1, NI_SUBJ_IPV4, niquery_option_subject_addr_handler), + NIQUERY_OPTION("ipv4-all", 0, IPUTILS_NI_IPV4_FLAG_ALL, niquery_option_ipv4_flag_handler), + NIQUERY_OPTION("subject-ipv6", 1, IPUTILS_NI_ICMP6_SUBJ_IPV6, niquery_option_subject_addr_handler), + NIQUERY_OPTION("subject-ipv4", 1, IPUTILS_NI_ICMP6_SUBJ_IPV4, niquery_option_subject_addr_handler), NIQUERY_OPTION("subject-name", 1, 0, niquery_option_subject_name_handler), NIQUERY_OPTION("subject-fqdn", 1, -1, niquery_option_subject_name_handler), NIQUERY_OPTION("help", 0, 0, niquery_option_help_handler), @@ -267,21 +268,21 @@ static int niquery_set_qtype(int type) static int niquery_option_name_handler(int index __attribute__((__unused__)), const char *arg __attribute__((__unused__))) { - if (niquery_set_qtype(NI_QTYPE_NAME) < 0) + if (niquery_set_qtype(IPUTILS_NI_QTYPE_DNSNAME) < 0) return -1; return 0; } static int niquery_option_ipv6_handler(int index __attribute__((__unused__)), const char *arg __attribute__((__unused__))) { - if (niquery_set_qtype(NI_QTYPE_IPV6ADDR) < 0) + if (niquery_set_qtype(IPUTILS_NI_QTYPE_IPV6ADDR) < 0) return -1; return 0; } static int niquery_option_ipv6_flag_handler(int index, const char *arg __attribute__((__unused__))) { - if (niquery_set_qtype(NI_QTYPE_IPV6ADDR) < 0) + if (niquery_set_qtype(IPUTILS_NI_QTYPE_IPV6ADDR) < 0) return -1; ni_flag |= niquery_options[index].data; return 0; @@ -289,14 +290,14 @@ static int niquery_option_ipv6_flag_handler(int index, const char *arg __attribu static int niquery_option_ipv4_handler(int index __attribute__((__unused__)), const char *arg __attribute__((__unused__))) { - if (niquery_set_qtype(NI_QTYPE_IPV4ADDR) < 0) + if (niquery_set_qtype(IPUTILS_NI_QTYPE_IPV4ADDR) < 0) return -1; return 0; } static int niquery_option_ipv4_flag_handler(int index, const char *arg __attribute__((__unused__))) { - if (niquery_set_qtype(NI_QTYPE_IPV4ADDR) < 0) + if (niquery_set_qtype(IPUTILS_NI_QTYPE_IPV4ADDR) < 0) return -1; ni_flag |= niquery_options[index].data; return 0; @@ -337,12 +338,12 @@ static int niquery_option_subject_addr_handler(int index, const char *arg) ni_subject_type = niquery_options[index].data; switch (niquery_options[index].data) { - case NI_SUBJ_IPV6: + case IPUTILS_NI_ICMP6_SUBJ_IPV6: ni_subject_len = sizeof(struct in6_addr); offset = OFFSET_OF(struct sockaddr_in6, sin6_addr); hints.ai_family = AF_INET6; break; - case NI_SUBJ_IPV4: + case IPUTILS_NI_ICMP6_SUBJ_IPV4: ni_subject_len = sizeof(struct in_addr); offset = OFFSET_OF(struct sockaddr_in, sin_addr); hints.ai_family = AF_INET; @@ -399,7 +400,7 @@ static int niquery_option_subject_name_handler(int index, const char *name) int rc; #endif - if (niquery_set_subject_type(NI_SUBJ_NAME) < 0) + if (niquery_set_subject_type(IPUTILS_NI_ICMP6_SUBJ_FQDN) < 0) return -1; #ifdef USE_IDN @@ -571,7 +572,7 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock if (!niquery_is_subject_valid()) { ni_subject = &whereto.sin6_addr; ni_subject_len = sizeof(whereto.sin6_addr); - ni_subject_type = NI_SUBJ_IPV6; + ni_subject_type = IPUTILS_NI_ICMP6_SUBJ_IPV6; } } @@ -580,7 +581,7 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock } else if (argc == 1) { target = *argv; } else { - if (ni_query < 0 && ni_subject_type != NI_SUBJ_NAME) + if (ni_query < 0 && ni_subject_type != IPUTILS_NI_ICMP6_SUBJ_FQDN) usage(); target = ni_group; } @@ -759,7 +760,7 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock ICMP6_FILTER_SETPASS(ICMP6_PARAM_PROB, &filter); if (niquery_is_enabled()) - ICMP6_FILTER_SETPASS(ICMPV6_NI_REPLY, &filter); + ICMP6_FILTER_SETPASS(IPUTILS_NI_ICMP6_REPLY, &filter); else ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter); @@ -966,7 +967,7 @@ int build_niquery(uint8_t *_nih, unsigned packet_size __attribute__((__unused__) nih = (struct ni_hdr *)_nih; nih->ni_cksum = 0; - nih->ni_type = ICMPV6_NI_QUERY; + nih->ni_type = IPUTILS_NI_ICMP6_QUERY; cc = sizeof(*nih); datalen = 0; @@ -1090,15 +1091,15 @@ void pr_niquery_reply_addr(struct ni_hdr *nih, int len) char buf[1024]; switch (ntohs(nih->ni_qtype)) { - case NI_QTYPE_IPV4ADDR: + case IPUTILS_NI_QTYPE_IPV4ADDR: af = AF_INET; aflen = sizeof(struct in_addr); - truncated = nih->ni_flags & NI_IPV6ADDR_F_TRUNCATE; + truncated = nih->ni_flags & IPUTILS_NI_IPV6_FLAG_TRUNCATE; break; - case NI_QTYPE_IPV6ADDR: + case IPUTILS_NI_QTYPE_IPV6ADDR: af = AF_INET6; aflen = sizeof(struct in6_addr); - truncated = nih->ni_flags & NI_IPV4ADDR_F_TRUNCATE; + truncated = nih->ni_flags & IPUTILS_NI_IPV4_FLAG_TRUNCATE; break; default: /* should not happen */ @@ -1137,23 +1138,23 @@ void pr_niquery_reply(uint8_t *_nih, int len) struct ni_hdr *nih = (struct ni_hdr *)_nih; switch (nih->ni_code) { - case NI_SUCCESS: + case IPUTILS_NI_ICMP6_SUCCESS: switch (ntohs(nih->ni_qtype)) { - case NI_QTYPE_NAME: + case IPUTILS_NI_QTYPE_DNSNAME: pr_niquery_reply_name(nih, len); break; - case NI_QTYPE_IPV4ADDR: - case NI_QTYPE_IPV6ADDR: + case IPUTILS_NI_QTYPE_IPV4ADDR: + case IPUTILS_NI_QTYPE_IPV6ADDR: pr_niquery_reply_addr(nih, len); break; default: printf(_(" unknown qtype(0x%02x)"), ntohs(nih->ni_qtype)); } break; - case NI_REFUSED: + case IPUTILS_NI_ICMP6_REFUSED: printf(_(" refused")); break; - case NI_UNKNOWN: + case IPUTILS_NI_ICMP6_UNKNOWN: printf(_(" unknown")); break; default: @@ -1214,7 +1215,7 @@ ping6_parse_reply(socket_st *sock, struct msghdr *msg, int cc, void *addr, struc fflush(stdout); return 0; } - } else if (icmph->icmp6_type == ICMPV6_NI_REPLY) { + } else if (icmph->icmp6_type == IPUTILS_NI_ICMP6_REPLY) { struct ni_hdr *nih = (struct ni_hdr *)icmph; int seq = niquery_check_nonce(nih->ni_nonce); if (seq < 0)