diff options
-rw-r--r-- | networking/libiproute/libnetlink.c | 128 | ||||
-rw-r--r-- | networking/libiproute/libnetlink.h | 4 | ||||
-rw-r--r-- | networking/libiproute/rt_names.c | 81 | ||||
-rw-r--r-- | networking/libiproute/rt_names.h | 3 |
4 files changed, 0 insertions, 216 deletions
diff --git a/networking/libiproute/libnetlink.c b/networking/libiproute/libnetlink.c index efbb6f1..ad5bcd7 100644 --- a/networking/libiproute/libnetlink.c +++ b/networking/libiproute/libnetlink.c @@ -319,134 +319,6 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, } } -int rtnl_listen(struct rtnl_handle *rtnl, - int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *), - void *jarg) -{ - int status; - struct nlmsghdr *h; - struct sockaddr_nl nladdr; - struct iovec iov; - char buf[8192]; - struct msghdr msg = { - (void*)&nladdr, sizeof(nladdr), - &iov, 1, - NULL, 0, - 0 - }; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = 0; - nladdr.nl_groups = 0; - - - iov.iov_base = buf; - - while (1) { - iov.iov_len = sizeof(buf); - status = recvmsg(rtnl->fd, &msg, 0); - - if (status < 0) { - if (errno == EINTR) - continue; - bb_perror_msg("OVERRUN"); - continue; - } - if (status == 0) { - bb_error_msg("EOF on netlink"); - return -1; - } - if (msg.msg_namelen != sizeof(nladdr)) { - bb_error_msg_and_die("Sender address length == %d", msg.msg_namelen); - } - for (h = (struct nlmsghdr*)buf; status >= sizeof(*h); ) { - int err; - int len = h->nlmsg_len; - int l = len - sizeof(*h); - - if (l<0 || len>status) { - if (msg.msg_flags & MSG_TRUNC) { - bb_error_msg("Truncated message"); - return -1; - } - bb_error_msg_and_die("!!!malformed message: len=%d", len); - } - - err = handler(&nladdr, h, jarg); - if (err < 0) { - return err; - } - - status -= NLMSG_ALIGN(len); - h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len)); - } - if (msg.msg_flags & MSG_TRUNC) { - bb_error_msg("Message truncated"); - continue; - } - if (status) { - bb_error_msg_and_die("!!!Remnant of size %d", status); - } - } -} - -int rtnl_from_file(FILE *rtnl, - int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *), - void *jarg) -{ - int status; - struct sockaddr_nl nladdr; - char buf[8192]; - struct nlmsghdr *h = (void*)buf; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = 0; - nladdr.nl_groups = 0; - - while (1) { - int err, len, type; - int l; - - status = fread(&buf, 1, sizeof(*h), rtnl); - - if (status < 0) { - if (errno == EINTR) - continue; - bb_perror_msg("rtnl_from_file: fread"); - return -1; - } - if (status == 0) - return 0; - - len = h->nlmsg_len; - type= h->nlmsg_type; - l = len - sizeof(*h); - - if (l<0 || len>sizeof(buf)) { - bb_error_msg("!!!malformed message: len=%d @%lu", - len, ftell(rtnl)); - return -1; - } - - status = fread(NLMSG_DATA(h), 1, NLMSG_ALIGN(l), rtnl); - - if (status < 0) { - bb_perror_msg("rtnl_from_file: fread"); - return -1; - } - if (status < l) { - bb_error_msg("rtnl-from_file: truncated message"); - return -1; - } - - err = handler(&nladdr, h, jarg); - if (err < 0) - return err; - } -} - int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data) { int len = RTA_LENGTH(4); diff --git a/networking/libiproute/libnetlink.h b/networking/libiproute/libnetlink.h index 45d3ad2..c8a8b78 100644 --- a/networking/libiproute/libnetlink.h +++ b/networking/libiproute/libnetlink.h @@ -37,10 +37,6 @@ extern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, void *data, i extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); -extern int rtnl_listen(struct rtnl_handle *, int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *), - void *jarg); -extern int rtnl_from_file(FILE *, int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *), - void *jarg); #endif /* __LIBNETLINK_H__ */ diff --git a/networking/libiproute/rt_names.c b/networking/libiproute/rt_names.c index 5206c4b..9d47491 100644 --- a/networking/libiproute/rt_names.c +++ b/networking/libiproute/rt_names.c @@ -207,23 +207,6 @@ static void rtnl_rtrealm_initialize(void) rtnl_rtrealm_tab, 256); } -const char * rtnl_rtrealm_n2a(int id, char *buf, int len) -{ - if (id<0 || id>=256) { - snprintf(buf, len, "%d", id); - return buf; - } - if (!rtnl_rtrealm_tab[id]) { - if (!rtnl_rtrealm_init) - rtnl_rtrealm_initialize(); - } - if (rtnl_rtrealm_tab[id]) - return rtnl_rtrealm_tab[id]; - snprintf(buf, len, "%d", id); - return buf; -} - - int rtnl_rtrealm_a2n(uint32_t *id, char *arg) { static char *cache = NULL; @@ -258,70 +241,6 @@ int rtnl_rtrealm_a2n(uint32_t *id, char *arg) -static char * rtnl_rttable_tab[256] = { - "unspec", -}; - -static int rtnl_rttable_init; - -static void rtnl_rttable_initialize(void) -{ - rtnl_rttable_init = 1; - rtnl_rttable_tab[255] = "local"; - rtnl_rttable_tab[254] = "main"; - rtnl_tab_initialize("/etc/iproute2/rt_tables", - rtnl_rttable_tab, 256); -} - -const char * rtnl_rttable_n2a(int id, char *buf, int len) -{ - if (id<0 || id>=256) { - snprintf(buf, len, "%d", id); - return buf; - } - if (!rtnl_rttable_tab[id]) { - if (!rtnl_rttable_init) - rtnl_rttable_initialize(); - } - if (rtnl_rttable_tab[id]) - return rtnl_rttable_tab[id]; - snprintf(buf, len, "%d", id); - return buf; -} - -int rtnl_rttable_a2n(uint32_t *id, char *arg) -{ - static char *cache = NULL; - static unsigned long res; - char *end; - int i; - - if (cache && strcmp(cache, arg) == 0) { - *id = res; - return 0; - } - - if (!rtnl_rttable_init) - rtnl_rttable_initialize(); - - for (i=0; i<256; i++) { - if (rtnl_rttable_tab[i] && - strcmp(rtnl_rttable_tab[i], arg) == 0) { - cache = rtnl_rttable_tab[i]; - res = i; - *id = res; - return 0; - } - } - - i = strtoul(arg, &end, 0); - if (!end || end == arg || *end || i > 255) - return -1; - *id = i; - return 0; -} - - static char * rtnl_rtdsfield_tab[256] = { "0", }; diff --git a/networking/libiproute/rt_names.h b/networking/libiproute/rt_names.h index ed090a1..deb5aa6 100644 --- a/networking/libiproute/rt_names.h +++ b/networking/libiproute/rt_names.h @@ -5,12 +5,9 @@ extern const char* rtnl_rtprot_n2a(int id, char *buf, int len); extern const char* rtnl_rtscope_n2a(int id, char *buf, int len); -extern const char* rtnl_rttable_n2a(int id, char *buf, int len); -extern const char* rtnl_rtrealm_n2a(int id, char *buf, int len); extern const char* rtnl_dsfield_n2a(int id, char *buf, int len); extern int rtnl_rtprot_a2n(uint32_t *id, char *arg); extern int rtnl_rtscope_a2n(uint32_t *id, char *arg); -extern int rtnl_rttable_a2n(uint32_t *id, char *arg); extern int rtnl_rtrealm_a2n(uint32_t *id, char *arg); extern int rtnl_dsfield_a2n(uint32_t *id, char *arg); |