X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fnl.c;h=f50922d76af193bb3ca10fe9e0c88eb16650765f;hb=794cb23fdd32ac721e02fe64647dfb71e6f2289a;hp=756df906a6909464ff5b21e7a091b2947d4ddf4a;hpb=b3360089d5f58f3a36c52b99e4cea4152c35db02;p=mono.git diff --git a/support/nl.c b/support/nl.c index 756df906a69..f50922d76af 100644 --- a/support/nl.c +++ b/support/nl.c @@ -7,7 +7,10 @@ * Copyright (c) Novell, Inc. 2011 */ +#ifdef HAVE_CONFIG_H #include +#endif + #include "nl.h" #if defined(HAVE_LINUX_NETLINK_H) && defined(HAVE_LINUX_RTNETLINK_H) @@ -22,12 +25,24 @@ #include #undef NL_DEBUG +#define NL_DEBUG_STMT(a) do { } while (0) #define NL_DEBUG_PRINT(...) + /* #define NL_DEBUG 1 +#define NL_DEBUG_STMT(a) do { a } while (0) #define NL_DEBUG_PRINT(...) g_message(__VA_ARGS__) */ + +#ifdef AF_INET6 +#define ADDR_BYTE_LENGTH 16 +#define ADDR_STR_LENGTH INET6_ADDRSTRLEN +#else +#define ADDR_LENGTH 4 +#define ADDR_STR_LENGTH INET_ADDRSTRLEN +#endif + enum event_type { EVT_NONE = 0, #define EVT_NONE 0 @@ -158,14 +173,12 @@ CreateNLSocket (void) sock = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); ret = fcntl (sock, F_GETFL, 0); -#ifdef O_NONBLOCK if (ret != -1) { ret |= O_NONBLOCK; ret = fcntl (sock, F_SETFL, ret); if (ret < 0) return -1; } -#endif memset (&sa, 0, sizeof (sa)); if (sock < 0) @@ -215,17 +228,10 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) gboolean have_src; gboolean have_pref_src; gboolean have_gw; -#ifdef AF_INET6 - char dst [16]; - char src [16]; - char pref_src [16]; - char gw [16]; -#else - char dst [4]; - char src [4]; - char pref_src [4]; - char gw [4]; -#endif + char dst [ADDR_BYTE_LENGTH]; + char src [ADDR_BYTE_LENGTH]; + char pref_src [ADDR_BYTE_LENGTH]; + char gw [ADDR_BYTE_LENGTH]; msg_type = nlp->nlmsg_type; NL_DEBUG_PRINT ("TYPE: %d %s", msg_type, FIND_RT_TYPE_NAME (msg_type)); @@ -235,10 +241,14 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) rtp = (struct rtmsg *) NLMSG_DATA (nlp); family = rtp->rtm_family; #ifdef AF_INET6 - addr_length = (family == AF_INET) ? 4 : 16; + if (family != AF_INET && family != AF_INET6) { #else - addr_length = 4; + if (family != AF_INET) { #endif + continue; + } + + addr_length = (family == AF_INET) ? 4 : 16; table = rtp->rtm_table; protocol = rtp->rtm_protocol; scope = rtp->rtm_scope; @@ -266,13 +276,7 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) for(; RTA_OK (rtap, rtl); rtap = RTA_NEXT(rtap, rtl)) { char *data; #ifdef NL_DEBUG -#ifdef AF_INET6 - char ip [INET6_ADDRSTRLEN]; - int ip_length = INET6_ADDRSTRLEN; -#else - char ip [INET_ADDRSTRLEN]; - int ip_length = INET_ADDRSTRLEN; -#endif + char ip [ADDR_STR_LENGTH]; #endif NL_DEBUG_PRINT ("\tAttribute: %d %d (%s)", rtap->rta_len, rtap->rta_type, FIND_RTM_ATTRS_NAME (rtap->rta_type)); @@ -281,38 +285,38 @@ ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size) case RTA_DST: have_dst = TRUE; memcpy (dst, data, addr_length); -#ifdef NL_DEBUG - *ip = 0; - inet_ntop (family, RTA_DATA (rtap), ip, ip_length); - NL_DEBUG_PRINT ("\t\tDst: %s", ip); -#endif + NL_DEBUG_STMT ( + *ip = 0; + inet_ntop (family, RTA_DATA (rtap), ip, sizeof (ip)); + NL_DEBUG_PRINT ("\t\tDst: %s", ip); + ); break; case RTA_PREFSRC: have_pref_src = TRUE; memcpy (pref_src, data, addr_length); -#ifdef NL_DEBUG - *ip = 0; - inet_ntop (family, RTA_DATA (rtap), ip, ip_length); - NL_DEBUG_PRINT ("\t\tPref. Src.: %s", ip); -#endif + NL_DEBUG_STMT ( + *ip = 0; + inet_ntop (family, RTA_DATA (rtap), ip, sizeof (ip)); + NL_DEBUG_PRINT ("\t\tPref. Src.: %s", ip); + ); break; case RTA_SRC: have_src = TRUE; memcpy (src, data, addr_length); -#ifdef NL_DEBUG - *ip = 0; - inet_ntop (family, RTA_DATA (rtap), ip, ip_length); - NL_DEBUG_PRINT ("\tSrc: %s", ip); -#endif + NL_DEBUG_STMT ( + *ip = 0; + inet_ntop (family, RTA_DATA (rtap), ip, sizeof (ip)); + NL_DEBUG_PRINT ("\tSrc: %s", ip); + ); break; case RTA_GATEWAY: have_gw = TRUE; memcpy (gw, data, addr_length); -#ifdef NL_DEBUG - *ip = 0; - inet_ntop (family, RTA_DATA (rtap), ip, ip_length); - NL_DEBUG_PRINT ("\t\tGateway: %s", ip); -#endif + NL_DEBUG_STMT ( + *ip = 0; + inet_ntop (family, RTA_DATA (rtap), ip, sizeof (ip)); + NL_DEBUG_PRINT ("\t\tGateway: %s", ip); + ); break; default: break;