]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip: allow ip address show to list addresses with certain flags not being set
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 22 Dec 2014 19:18:43 +0000 (20:18 +0100)
committerStephen Hemminger <shemming@brocade.com>
Wed, 24 Dec 2014 20:16:31 +0000 (12:16 -0800)
Sometimes it's needed to have "ip address show" list only addresses
with certain flags not being set, e.g. in network scripts.
As an example one might want to exclude addresses in "tentative"
or "deprecated" state.

Support listing addresses with flags tentative, deprecated, dadfailed
not being set by prefixing the respective flag with a minus.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
ip/ipaddress.c

index 221ae1fc054a580ac285c99ec48db1f0c40deedb..a07157267b44929ae0ecf523855861b1756335ff 100644 (file)
@@ -80,7 +80,7 @@ static void usage(void)
        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 | dadfailed | temporary |\n");
+       fprintf(stderr, "           [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n");
        fprintf(stderr, "           CONFFLAG-LIST ]\n");
        fprintf(stderr, "CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n");
        fprintf(stderr, "CONFFLAG  := [ home | nodad | mngtmpaddr | noprefixroute ]\n");
@@ -1261,9 +1261,15 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
                } else if (strcmp(*argv, "tentative") == 0) {
                        filter.flags |= IFA_F_TENTATIVE;
                        filter.flagmask |= IFA_F_TENTATIVE;
+               } else if (strcmp(*argv, "-tentative") == 0) {
+                       filter.flags &= ~IFA_F_TENTATIVE;
+                       filter.flagmask |= IFA_F_TENTATIVE;
                } else if (strcmp(*argv, "deprecated") == 0) {
                        filter.flags |= IFA_F_DEPRECATED;
                        filter.flagmask |= IFA_F_DEPRECATED;
+               } else if (strcmp(*argv, "-deprecated") == 0) {
+                       filter.flags &= ~IFA_F_DEPRECATED;
+                       filter.flagmask |= IFA_F_DEPRECATED;
                } else if (strcmp(*argv, "home") == 0) {
                        filter.flags |= IFA_F_HOMEADDRESS;
                        filter.flagmask |= IFA_F_HOMEADDRESS;
@@ -1279,6 +1285,9 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
                } else if (strcmp(*argv, "dadfailed") == 0) {
                        filter.flags |= IFA_F_DADFAILED;
                        filter.flagmask |= IFA_F_DADFAILED;
+               } else if (strcmp(*argv, "-dadfailed") == 0) {
+                       filter.flags &= ~IFA_F_DADFAILED;
+                       filter.flagmask |= IFA_F_DADFAILED;
                } else if (strcmp(*argv, "label") == 0) {
                        NEXT_ARG();
                        filter.label = *argv;