diff -urN iproute2-050816/ip/ipaddress.c iproute2-050816-noarp/ip/ipaddress.c --- iproute2-050816/ip/ipaddress.c 2005-07-06 00:37:15.000000000 +0200 +++ iproute2-050816-noarp/ip/ipaddress.c 2005-08-19 21:21:49.000000000 +0200 @@ -61,7 +61,7 @@ if (do_link) { iplink_usage(); } - fprintf(stderr, "Usage: ip addr {add|del} IFADDR dev STRING\n"); + fprintf(stderr, "Usage: ip addr {add|del} IFADDR dev STRING [ hidden ]\n"); fprintf(stderr, " ip addr {show|flush} [ dev STRING ] [ scope SCOPE-ID ]\n"); fprintf(stderr, " [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]\n"); fprintf(stderr, "IFADDR := PREFIX | ADDR peer PREFIX\n"); @@ -70,7 +70,7 @@ fprintf(stderr, "SCOPE-ID := [ host | link | global | NUMBER ]\n"); fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n"); fprintf(stderr, "FLAG := [ permanent | dynamic | secondary | primary |\n"); - fprintf(stderr, " tentative | deprecated ]\n"); + fprintf(stderr, " tentative | deprecated | hidden ]\n"); exit(-1); } @@ -406,6 +406,12 @@ ifa->ifa_flags &= ~IFA_F_SECONDARY; fprintf(fp, "secondary "); } +#ifdef IFA_F_HIDDEN + if (ifa->ifa_flags&IFA_F_HIDDEN) { + ifa->ifa_flags &= ~IFA_F_HIDDEN; + fprintf(fp, "hidden "); + } +#endif if (ifa->ifa_flags&IFA_F_TENTATIVE) { ifa->ifa_flags &= ~IFA_F_TENTATIVE; fprintf(fp, "tentative "); @@ -548,6 +554,11 @@ } else if (strcmp(*argv, "primary") == 0) { filter.flags &= ~IFA_F_SECONDARY; filter.flagmask |= IFA_F_SECONDARY; +#ifdef IFA_F_HIDDEN + } else if (strcmp(*argv, "hidden") == 0) { + filter.flags &= ~IFA_F_HIDDEN; + filter.flagmask |= IFA_F_HIDDEN; +#endif } else if (strcmp(*argv, "tentative") == 0) { filter.flags |= IFA_F_TENTATIVE; filter.flagmask |= IFA_F_TENTATIVE; @@ -810,6 +821,11 @@ } else if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); d = *argv; + } else if (strcmp(*argv, "hidden") == 0 || + strcmp(*argv, "noarp") == 0) { +#ifdef IFA_F_HIDDEN + req.ifa.ifa_flags |= IFA_F_HIDDEN; +#endif } else if (strcmp(*argv, "label") == 0) { NEXT_ARG(); l = *argv; diff -urN iproute2-050816/ip/iproute.c iproute2-050816-noarp/ip/iproute.c --- iproute2-050816/ip/iproute.c 2005-07-06 00:37:15.000000000 +0200 +++ iproute2-050816-noarp/ip/iproute.c 2005-08-19 21:21:49.000000000 +0200 @@ -65,7 +65,7 @@ fprintf(stderr, " unreachable | prohibit | blackhole | nat ]\n"); fprintf(stderr, "TABLE_ID := [ local | main | default | all | NUMBER ]\n"); fprintf(stderr, "SCOPE := [ host | link | global | NUMBER ]\n"); - fprintf(stderr, "FLAGS := [ equalize ]\n"); + fprintf(stderr, "FLAGS := [ equalize | noarp ]\n"); fprintf(stderr, "MP_ALGO := { rr | drr | random | wrandom }\n"); fprintf(stderr, "NHFLAGS := [ onlink | pervasive ]\n"); fprintf(stderr, "RTPROTO := [ kernel | boot | static | NUMBER ]\n"); @@ -382,6 +382,10 @@ fprintf(fp, "pervasive "); if (r->rtm_flags & RTM_F_EQUALIZE) fprintf(fp, "equalize "); +#ifdef RTM_F_NOARP + if (r->rtm_flags & RTM_F_NOARP) + fprintf(fp, "noarp "); +#endif if (r->rtm_flags & RTM_F_NOTIFY) fprintf(fp, "notify "); @@ -419,6 +423,9 @@ PRTFL(REDIRECTED, "redirected"); PRTFL(DOREDIRECT, "redirect"); PRTFL(FAST, "fastroute"); +#ifdef RTCF_NOARP + PRTFL(NOARP, "noarp"); +#endif PRTFL(NOTIFY, "notify"); PRTFL(TPROXY, "proxy"); #ifdef RTCF_EQUALIZE @@ -827,6 +834,10 @@ } else if (matches(*argv, "equalize") == 0 || strcmp(*argv, "eql") == 0) { req.r.rtm_flags |= RTM_F_EQUALIZE; +#ifdef RTM_F_NOARP + } else if (matches(*argv, "noarp") == 0) { + req.r.rtm_flags |= RTM_F_NOARP; +#endif } else if (strcmp(*argv, "nexthop") == 0) { nhs_ok = 1; break;