Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (7 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/networking/libiproute/iproute.c

    r2725 r3232  
    3232    //int typemask; - unused
    3333    //int tos, tosmask; - unused
    34     int iif, iifmask;
    35     int oif, oifmask;
     34    int iif;
     35    int oif;
    3636    //int realm, realmmask; - unused
    3737    //inet_prefix rprefsrc; - read-only
     
    8383    struct rtmsg *r = NLMSG_DATA(n);
    8484    int len = n->nlmsg_len;
    85     struct rtattr * tb[RTA_MAX+1];
     85    struct rtattr *tb[RTA_MAX+1];
    8686    char abuf[256];
    8787    inet_prefix dst;
     
    160160
    161161    memset(tb, 0, sizeof(tb));
     162    memset(&src, 0, sizeof(src));
     163    memset(&dst, 0, sizeof(dst));
    162164    parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
     165
     166    if (tb[RTA_SRC]) {
     167        src.bitlen = r->rtm_src_len;
     168        src.bytelen = (r->rtm_family == AF_INET6 ? 16 : 4);
     169        memcpy(src.data, RTA_DATA(tb[RTA_SRC]), src.bytelen);
     170    }
     171    if (tb[RTA_DST]) {
     172        dst.bitlen = r->rtm_dst_len;
     173        dst.bytelen = (r->rtm_family == AF_INET6 ? 16 : 4);
     174        memcpy(dst.data, RTA_DATA(tb[RTA_DST]), dst.bytelen);
     175    }
    163176
    164177    if (G_filter.rdst.family
     
    183196        return 0;
    184197    }
    185     if (G_filter.flushb
    186      && r->rtm_family == AF_INET6
    187      && r->rtm_dst_len == 0
    188      && r->rtm_type == RTN_UNREACHABLE
    189      && tb[RTA_PRIORITY]
    190      && *(int*)RTA_DATA(tb[RTA_PRIORITY]) == -1
    191     ) {
    192         return 0;
     198    if (G_filter.oif != 0) {
     199        if (!tb[RTA_OIF])
     200            return 0;
     201        if (G_filter.oif != *(int*)RTA_DATA(tb[RTA_OIF]))
     202            return 0;
    193203    }
    194204
    195205    if (G_filter.flushb) {
    196206        struct nlmsghdr *fn;
     207
     208        /* We are creating route flush commands */
     209
     210        if (r->rtm_family == AF_INET6
     211         && r->rtm_dst_len == 0
     212         && r->rtm_type == RTN_UNREACHABLE
     213         && tb[RTA_PRIORITY]
     214         && *(int*)RTA_DATA(tb[RTA_PRIORITY]) == -1
     215        ) {
     216            return 0;
     217        }
     218
    197219        if (NLMSG_ALIGN(G_filter.flushp) + n->nlmsg_len > G_filter.flushe) {
    198220            if (flush_update())
    199221                bb_error_msg_and_die("flush");
    200222        }
    201         fn = (struct nlmsghdr*)(G_filter.flushb + NLMSG_ALIGN(G_filter.flushp));
     223        fn = (void*)(G_filter.flushb + NLMSG_ALIGN(G_filter.flushp));
    202224        memcpy(fn, n, n->nlmsg_len);
    203225        fn->nlmsg_type = RTM_DELROUTE;
     
    208230        return 0;
    209231    }
     232
     233    /* We are printing routes */
    210234
    211235    if (n->nlmsg_type == RTM_DELROUTE) {
     
    258282                    abuf, sizeof(abuf)));
    259283    }
    260     if (tb[RTA_OIF] && G_filter.oifmask != -1) {
     284    if (tb[RTA_OIF]) {
    261285        printf("dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF])));
    262286    }
     287
     288    /* Todo: parse & show "proto kernel", "scope link" here */
    263289
    264290    if (tb[RTA_PREFSRC] && /*G_filter.rprefsrc.bitlen - always 0*/ 0 != host_len) {
     
    293319        }
    294320    }
    295     if (tb[RTA_IIF] && G_filter.iifmask != -1) {
     321    if (tb[RTA_IIF] && G_filter.iif == 0) {
    296322        printf(" iif %s", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_IIF])));
    297323    }
     
    414440            }
    415441            if ((**argv < '0' || **argv > '9')
    416              && rtnl_rtntype_a2n(&type, *argv) == 0) {
     442             && rtnl_rtntype_a2n(&type, *argv) == 0
     443            ) {
    417444                NEXT_ARG();
    418445                req.r.rtm_type = type;
     
    663690            idx = xll_name_to_index(id);
    664691            G_filter.iif = idx;
    665             G_filter.iifmask = -1;
    666692        }
    667693        if (od) {
    668694            idx = xll_name_to_index(od);
    669695            G_filter.oif = idx;
    670             G_filter.oifmask = -1;
    671696        }
    672697    }
Note: See TracChangeset for help on using the changeset viewer.