summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpaul <paul>2002-12-13 21:03:13 +0000
committerpaul <paul>2002-12-13 21:03:13 +0000
commit2e3b2e474ed5ba04744b167132a84f9954485af4 (patch)
treecc07fb34a1bf21ead5cc3ad69e4a9dfde2b43b0e /lib
parent7afa08da2d3690baee1739da400775f8543f5863 (diff)
zebra link state detection support
Diffstat (limited to 'lib')
-rw-r--r--lib/if.c16
-rw-r--r--lib/if.h3
-rw-r--r--lib/zclient.c2
3 files changed, 21 insertions, 0 deletions
diff --git a/lib/if.c b/lib/if.c
index 0934e40d..ce3595d3 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -270,6 +270,22 @@ if_is_up (struct interface *ifp)
return ifp->flags & IFF_UP;
}
+/* Is interface running? */
+int
+if_is_running (struct interface *ifp)
+{
+ return ifp->flags & IFF_RUNNING;
+}
+
+/* Is the interface operative, eg. either UP & RUNNING
+ or UP & !ZEBRA_INTERFACE_LINK_DETECTION */
+int
+if_is_operative (struct interface *ifp)
+{
+ return ((ifp->flags & IFF_UP) &&
+ (ifp->flags & IFF_RUNNING || !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION)));
+}
+
/* Is this loopback interface ? */
int
if_is_loopback (struct interface *ifp)
diff --git a/lib/if.h b/lib/if.h
index 55337fc4..554126fd 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -85,6 +85,7 @@ struct interface
u_char status;
#define ZEBRA_INTERFACE_ACTIVE (1 << 0)
#define ZEBRA_INTERFACE_SUB (1 << 1)
+#define ZEBRA_INTERFACE_LINKDETECTION (1 << 2)
/* Interface flags. */
unsigned long flags;
@@ -188,6 +189,8 @@ struct interface *if_lookup_address (struct in_addr);
struct interface *if_get_by_name (char *);
void if_delete (struct interface *);
int if_is_up (struct interface *);
+int if_is_running (struct interface *);
+int if_is_operative (struct interface *);
int if_is_loopback (struct interface *);
int if_is_broadcast (struct interface *);
int if_is_pointopoint (struct interface *);
diff --git a/lib/zclient.c b/lib/zclient.c
index 5e371546..c1b286f4 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -564,6 +564,7 @@ zebra_interface_add_read (struct stream *s)
ifp->ifindex = stream_getl (s);
/* Read interface's value. */
+ ifp->status = stream_getc (s);
ifp->flags = stream_getl (s);
ifp->metric = stream_getl (s);
ifp->mtu = stream_getl (s);
@@ -600,6 +601,7 @@ zebra_interface_state_read (struct stream *s)
ifp->ifindex = stream_getl (s);
/* Read interface's value. */
+ ifp->status = stream_getc (s);
ifp->flags = stream_getl (s);
ifp->metric = stream_getl (s);
ifp->mtu = stream_getl (s);