diff options
Diffstat (limited to 'squark-auth-snmp.c')
-rw-r--r-- | squark-auth-snmp.c | 69 |
1 files changed, 6 insertions, 63 deletions
diff --git a/squark-auth-snmp.c b/squark-auth-snmp.c index 4b88913..f386ab3 100644 --- a/squark-auth-snmp.c +++ b/squark-auth-snmp.c @@ -22,12 +22,12 @@ #include <stdio.h> #include <string.h> #include <unistd.h> -#include <arpa/inet.h> #include <net-snmp/net-snmp-config.h> #include <net-snmp/net-snmp-includes.h> #include "blob.h" +#include "addr.h" /* Compile time configurables */ #define SWITCH_HASH_SIZE 128 @@ -167,43 +167,6 @@ static inline void blob_pull_oid_dump(blob_t *b, blob_t d) /* ----------------------------------------------------------------- */ -typedef union { - struct sockaddr any; - struct sockaddr_in ipv4; -} sockaddr_any; - -int addr_len(const sockaddr_any *addr) -{ - switch (addr->any.sa_family) { - case AF_INET: - return sizeof(struct sockaddr_in); - default: - return 0; - } -} - -void addr_copy(sockaddr_any *dst, const sockaddr_any *src) -{ - memcpy(dst, src, addr_len(src)); -} - -int addr_cmp(const sockaddr_any *a, const sockaddr_any *b) -{ - if (a->any.sa_family != b->any.sa_family) - return -1; - return memcmp(a, b, addr_len(a)); -} - -sockaddr_any *addr_parse(const char *str, sockaddr_any *addr) -{ - memset(addr, 0, sizeof(*addr)); - addr->ipv4.sin_family = AF_INET; - addr->ipv4.sin_addr.s_addr = inet_addr(str); - if (addr->ipv4.sin_addr.s_addr == -1) - return NULL; - return addr; -} - void blob_push_iana_afn(blob_t *b, sockaddr_any *addr) { unsigned char *ptr; @@ -245,26 +208,6 @@ sockaddr_any *blob_pull_iana_afn(blob_t *b, sockaddr_any *addr) return addr; } -unsigned long addr_hash(const sockaddr_any *addr) -{ - switch (addr->any.sa_family) { - case AF_INET: - return htonl(addr->ipv4.sin_addr.s_addr); - default: - return 0; - } -} - -const char *addr_print(const sockaddr_any *addr) -{ - switch (addr->any.sa_family) { - case AF_INET: - return inet_ntoa(addr->ipv4.sin_addr); - default: - return "unknown"; - } -} - /* ----------------------------------------------------------------- */ static void safe_free(void *ptr) @@ -435,10 +378,10 @@ void link_switch(const char *a, int ap, const char *b, int bp) struct switch_port_info *spia, *spib; sockaddr_any addr; - sia = get_switch(addr_parse(a, &addr)); + sia = get_switch(addr_parse(BLOB_STRLEN(a), &addr)); spia = get_switch_port(sia, ap); - sib = get_switch(addr_parse(b, &addr)); + sib = get_switch(addr_parse(BLOB_STRLEN(b), &addr)); spib = get_switch_port(sib, bp); addr_copy(&spia->link_partner, &sib->addr); @@ -994,7 +937,7 @@ void start_authentication(const char *token, const char *ip) auth = calloc(1, sizeof(*auth)); auth->token = strdup(token); - if (addr_parse(ip, &auth->addr) == NULL) { + if (addr_parse(BLOB_STRLEN(ip), &auth->addr) == NULL) { auth_completed(auth); return; } @@ -1112,9 +1055,9 @@ int main(int argc, char **argv) if (l2_root == NULL) l2_root = l3_root; - l3_root_dev = get_switch(addr_parse(l3_root, &addr)); + l3_root_dev = get_switch(addr_parse(BLOB_STRLEN(l3_root), &addr)); l3_if_ndx = resolve_ifName2ifIndex(l3_root_dev, BLOB_STRLEN((char *) l3_ifname)); - l2_root_dev = get_switch(addr_parse(l2_root, &addr)); + l2_root_dev = get_switch(addr_parse(BLOB_STRLEN(l2_root), &addr)); l2_vlan_ndx = atoi(l2_vlan); username_format_flags = parse_format(username_format); |