diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/if.c | 62 | ||||
-rw-r--r-- | lib/if.h | 63 | ||||
-rw-r--r-- | lib/smux.c | 83 | ||||
-rw-r--r-- | lib/smux.h | 2 | ||||
-rw-r--r-- | lib/sockopt.c | 13 | ||||
-rw-r--r-- | lib/vty.c | 2 |
6 files changed, 120 insertions, 105 deletions
@@ -320,60 +320,6 @@ if_get_by_name_len(const char *name, size_t namelen) if_create(name, namelen); } -/* Does interface up ? */ -int -if_is_up (struct interface *ifp) -{ - return ifp->flags & IFF_UP; -} - -/* Is interface running? */ -int -if_is_running (struct interface *ifp) -{ - return ifp->flags & IFF_RUNNING; -} - -/* Is the interface operative, eg. either UP & RUNNING - or UP & !ZEBRA_INTERFACE_LINK_DETECTION */ -int -if_is_operative (struct interface *ifp) -{ - return ((ifp->flags & IFF_UP) && - (ifp->flags & IFF_RUNNING || !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION))); -} - -/* Is this loopback interface ? */ -int -if_is_loopback (struct interface *ifp) -{ - /* XXX: Do this better, eg what if IFF_WHATEVER means X on platform M - * but Y on platform N? - */ - return (ifp->flags & (IFF_LOOPBACK|IFF_NOXMIT|IFF_VIRTUAL)); -} - -/* Does this interface support broadcast ? */ -int -if_is_broadcast (struct interface *ifp) -{ - return ifp->flags & IFF_BROADCAST; -} - -/* Does this interface support broadcast ? */ -int -if_is_pointopoint (struct interface *ifp) -{ - return ifp->flags & IFF_POINTOPOINT; -} - -/* Does this interface support multicast ? */ -int -if_is_multicast (struct interface *ifp) -{ - return ifp->flags & IFF_MULTICAST; -} - /* Printout flag information into log */ const char * if_flag_dump (unsigned long flag) @@ -422,7 +368,7 @@ if_flag_dump (unsigned long flag) /* For debugging */ static void -if_dump (struct interface *ifp) +if_dump (const struct interface *ifp) { struct listnode *node; struct connected *c; @@ -444,7 +390,7 @@ if_dump (struct interface *ifp) /* Interface printing for all interface. */ void -if_dump_all () +if_dump_all (void) { struct listnode *node; void *p; @@ -620,9 +566,7 @@ DEFUN (show_address, struct connected * connected_new (void) { - struct connected *new = XMALLOC (MTYPE_CONNECTED, sizeof (struct connected)); - memset (new, 0, sizeof (struct connected)); - return new; + return XCALLOC (MTYPE_CONNECTED, sizeof (struct connected)); } /* Free connected structure. */ @@ -257,13 +257,62 @@ extern void if_delete_retain (struct interface *); deletes it from the interface list and frees the structure. */ extern void if_delete (struct interface *); -extern int if_is_up (struct interface *); -extern int if_is_running (struct interface *); -extern int if_is_operative (struct interface *); -extern int if_is_loopback (struct interface *); -extern int if_is_broadcast (struct interface *); -extern int if_is_pointopoint (struct interface *); -extern int if_is_multicast (struct interface *); +/* Does interface up ? */ +static inline int +if_is_up (const struct interface *ifp) +{ + return ifp->flags & IFF_UP; +} + +/* Is interface running? */ +static inline int +if_is_running (const struct interface *ifp) +{ + return ifp->flags & IFF_RUNNING; +} + +/* Is the interface operative, eg. either UP & RUNNING + or UP & !ZEBRA_INTERFACE_LINK_DETECTION */ +static inline int +if_is_operative (const struct interface *ifp) +{ + return ((ifp->flags & IFF_UP) && + (ifp->flags & IFF_RUNNING || + !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION))); +} + +/* Is this loopback interface ? */ +static inline int +if_is_loopback (const struct interface *ifp) +{ + /* XXX: Do this better, eg what if IFF_WHATEVER means X on platform M + * but Y on platform N? + */ + return (ifp->flags & (IFF_LOOPBACK|IFF_NOXMIT|IFF_VIRTUAL)); +} + +/* Does this interface support broadcast ? */ +static inline int +if_is_broadcast (const struct interface *ifp) +{ + return ifp->flags & IFF_BROADCAST; +} + +/* Does this interface support broadcast ? */ +static inline int +if_is_pointopoint (const struct interface *ifp) +{ + return ifp->flags & IFF_POINTOPOINT; +} + +/* Does this interface support multicast ? */ +static inline int +if_is_multicast (const struct interface *ifp) +{ + return ifp->flags & IFF_MULTICAST; +} + + extern void if_add_hook (int, int (*)(struct interface *)); extern void if_init (void); extern void if_dump_all (void); @@ -226,7 +226,8 @@ smux_socket () } freeaddrinfo(res0); if (sock < 0) - zlog_warn ("Can't connect to SNMP agent with SMUX"); + if (debug_smux) + zlog_debug ("Can't connect to SNMP agent with SMUX"); #else sock = socket (AF_INET, SOCK_STREAM, 0); if (sock < 0) @@ -257,7 +258,8 @@ smux_socket () { close (sock); smux_sock = -1; - zlog_warn ("Can't connect to SNMP agent with SMUX"); + if (debug_smux) + zlog_debug ("Can't connect to SNMP agent with SMUX"); return -1; } #endif @@ -322,13 +324,13 @@ smux_getresp_send (oid objid[], size_t objid_len, long reqid, long errstat, asn_build_sequence(h1,&length,(u_char)SMUX_GETRSP,ptr-h1e); if (debug_smux) - zlog_debug ("SMUX getresp send: %ld", (ptr - buf)); + zlog_debug ("SMUX getresp send: %td", (ptr - buf)); ret = send (smux_sock, buf, (ptr - buf), 0); } -char * -smux_var (char *ptr, size_t len, oid objid[], size_t *objid_len, +static u_char * +smux_var (u_char *ptr, size_t len, oid objid[], size_t *objid_len, size_t *var_val_len, u_char *var_val_type, void **var_value) @@ -339,14 +341,14 @@ smux_var (char *ptr, size_t len, oid objid[], size_t *objid_len, u_char *val; if (debug_smux) - zlog_debug ("SMUX var parse: len %ld", len); + zlog_debug ("SMUX var parse: len %zd", len); /* Parse header. */ ptr = asn_parse_header (ptr, &len, &type); if (debug_smux) { - zlog_debug ("SMUX var parse: type %d len %ld", type, len); + zlog_debug ("SMUX var parse: type %u len %zd", type, len); zlog_debug ("SMUX var parse: type must be %d", (ASN_SEQUENCE | ASN_CONSTRUCTOR)); } @@ -648,8 +650,8 @@ smux_getnext (oid *reqid, size_t *reqid_len, int exact, } /* GET message header. */ -char * -smux_parse_get_header (char *ptr, size_t *len, long *reqid) +static u_char * +smux_parse_get_header (u_char *ptr, size_t *len, long *reqid) { u_char type; long errstat; @@ -665,19 +667,19 @@ smux_parse_get_header (char *ptr, size_t *len, long *reqid) ptr = asn_parse_int (ptr, len, &type, &errstat, sizeof (errstat)); if (debug_smux) - zlog_debug ("SMUX GET errstat %ld len: %ld", errstat, *len); + zlog_debug ("SMUX GET errstat %ld len: %zd", errstat, *len); /* Error index. */ ptr = asn_parse_int (ptr, len, &type, &errindex, sizeof (errindex)); if (debug_smux) - zlog_debug ("SMUX GET errindex %ld len: %ld", errindex, *len); + zlog_debug ("SMUX GET errindex %ld len: %zd", errindex, *len); return ptr; } -void -smux_parse_set (char *ptr, size_t len, int action) +static void +smux_parse_set (u_char *ptr, size_t len, int action) { long reqid; oid oid[MAX_OID_LEN]; @@ -688,7 +690,7 @@ smux_parse_set (char *ptr, size_t len, int action) int ret; if (debug_smux) - zlog_debug ("SMUX SET(%s) message parse: len %ld", + zlog_debug ("SMUX SET(%s) message parse: len %zd", (RESERVE1 == action) ? "RESERVE1" : ((FREE == action) ? "FREE" : "COMMIT"), len); @@ -707,8 +709,8 @@ smux_parse_set (char *ptr, size_t len, int action) smux_getresp_send (oid, oid_len, reqid, ret, 3, ASN_NULL, NULL, 0); } -void -smux_parse_get (char *ptr, size_t len, int exact) +static void +smux_parse_get (u_char *ptr, size_t len, int exact) { long reqid; oid oid[MAX_OID_LEN]; @@ -719,7 +721,7 @@ smux_parse_get (char *ptr, size_t len, int exact) int ret; if (debug_smux) - zlog_debug ("SMUX GET message parse: len %ld", len); + zlog_debug ("SMUX GET message parse: len %zd", len); /* Parse GET message header. */ ptr = smux_parse_get_header (ptr, &len, &reqid); @@ -741,8 +743,8 @@ smux_parse_get (char *ptr, size_t len, int exact) } /* Parse SMUX_CLOSE message. */ -void -smux_parse_close (char *ptr, int len) +static void +smux_parse_close (u_char *ptr, int len) { long reason = 0; @@ -755,10 +757,10 @@ smux_parse_close (char *ptr, int len) } /* SMUX_RRSP message. */ -void -smux_parse_rrsp (char *ptr, size_t len) +static void +smux_parse_rrsp (u_char *ptr, size_t len) { - char val; + u_char val; long errstat; ptr = asn_parse_int (ptr, &len, &val, &errstat, sizeof (errstat)); @@ -768,8 +770,8 @@ smux_parse_rrsp (char *ptr, size_t len) } /* Parse SMUX message. */ -int -smux_parse (char *ptr, size_t len) +static int +smux_parse (u_char *ptr, size_t len) { /* This buffer we'll use for SOUT message. We could allocate it with malloc and save only static pointer/lenght, but IMHO static @@ -789,7 +791,7 @@ process_rest: /* see note below: YYY */ ptr = asn_parse_header (ptr, &len, &type); if (debug_smux) - zlog_debug ("SMUX message received type: %d rest len: %ld", type, len); + zlog_debug ("SMUX message received type: %d rest len: %zd", type, len); switch (type) { @@ -944,7 +946,7 @@ smux_open (int sock) u_char *ptr; size_t len; u_long version; - u_char progname[] = QUAGGA_PROGNAME "-" QUAGGA_VERSION; + char progname[] = QUAGGA_PROGNAME "-" QUAGGA_VERSION; if (debug_smux) { @@ -963,7 +965,7 @@ smux_open (int sock) version = 0; ptr = asn_build_int (ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), - &version, sizeof (version)); + (long *)&version, sizeof (version)); /* SMUX connection oid. */ ptr = asn_build_objid (ptr, &len, @@ -975,13 +977,13 @@ smux_open (int sock) ptr = asn_build_string (ptr, &len, (u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR), - progname, strlen (progname)); + (u_char *) progname, strlen (progname)); /* SMUX connection password. */ ptr = asn_build_string (ptr, &len, (u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR), - smux_passwd, strlen (smux_passwd)); + (u_char *) smux_passwd, strlen (smux_passwd)); /* Fill in real SMUX header. We exclude ASN header size (2). */ len = BUFSIZ; @@ -1032,13 +1034,13 @@ smux_trap (oid *name, size_t namelen, val = SNMP_TRAP_ENTERPRISESPECIFIC; ptr = asn_build_int (ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), - &val, sizeof (val)); + (long *)&val, sizeof (val)); /* Specific trap integer. */ val = sptrap; ptr = asn_build_int (ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), - &val, sizeof (val)); + (long *)&val, sizeof (val)); /* Timeticks timestamp. */ val = 0; @@ -1179,7 +1181,10 @@ smux_connect (struct thread *t) int ret; if (debug_smux) - zlog_debug ("SMUX connect try %d", fail + 1); + { + fail = fail + 1; + zlog_debug ("SMUX connect try %d", fail); + } /* Clear thread poner of myself. */ smux_connect_thread = NULL; @@ -1188,8 +1193,10 @@ smux_connect (struct thread *t) smux_sock = smux_socket (); if (smux_sock < 0) { - if (++fail < SMUX_MAX_FAILURE) - smux_event (SMUX_CONNECT, 0); + if (debug_smux) + zlog_debug ("SMUX socket/connection creation error"); + // if (++fail < SMUX_MAX_FAILURE) + smux_event (SMUX_CONNECT, 0); return 0; } @@ -1200,8 +1207,8 @@ smux_connect (struct thread *t) zlog_warn ("SMUX open message send failed: %s", safe_strerror (errno)); close (smux_sock); smux_sock = -1; - if (++fail < SMUX_MAX_FAILURE) - smux_event (SMUX_CONNECT, 0); + // if (++fail < SMUX_MAX_FAILURE) + smux_event (SMUX_CONNECT, 0); return -1; } @@ -1212,8 +1219,8 @@ smux_connect (struct thread *t) zlog_warn ("SMUX register message send failed: %s", safe_strerror (errno)); close (smux_sock); smux_sock = -1; - if (++fail < SMUX_MAX_FAILURE) - smux_event (SMUX_CONNECT, 0); + // if (++fail < SMUX_MAX_FAILURE) + smux_event (SMUX_CONNECT, 0); return -1; } @@ -39,7 +39,7 @@ #define SMUX_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3) #define SMUX_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4) -#define SMUX_MAX_FAILURE 3 +// #define SMUX_MAX_FAILURE 3 /* Structures here are mostly compatible with UCD SNMP 4.1.1 */ #define MATCH_FAILED (-1) diff --git a/lib/sockopt.c b/lib/sockopt.c index a2038a5c..2f01199a 100644 --- a/lib/sockopt.c +++ b/lib/sockopt.c @@ -343,6 +343,19 @@ setsockopt_ipv4_ifindex (int sock, int val) } int +setsockopt_ipv4_tos(int sock, int tos) +{ + int ret; + + ret = setsockopt (sock, IPPROTO_IP, IP_TOS, &tos, sizeof (tos)); + if (ret < 0) + zlog_warn ("Can't set IP_TOS option for fd %d to %#x: %s", + sock, tos, safe_strerror(errno)); + return ret; +} + + +int setsockopt_ifindex (int af, int sock, int val) { int ret = -1; @@ -1827,6 +1827,7 @@ vty_serv_sock_addrinfo (const char *hostname, unsigned short port) } #endif /* HAVE_IPV6 && ! NRL */ +#if 0 /* Make vty server socket. */ static void vty_serv_sock_family (const char* addr, unsigned short port, int family) @@ -1891,6 +1892,7 @@ vty_serv_sock_family (const char* addr, unsigned short port, int family) /* Add vty server event. */ vty_event (VTY_SERV, accept_sock, NULL); } +#endif #ifdef VTYSH /* For sockaddr_un. */ |