]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/interface.h
isisd: implement the 'lsp-too-large' notification
[mirror_frr.git] / zebra / interface.h
index 2add0a2de6b845cec53c6555762c88805b3f1fb9..01dd6977729dc9f8c78d456ca68556b31e0b5797 100644 (file)
@@ -1,3 +1,4 @@
+
 /* Interface function header.
  * Copyright (C) 1999 Kunihiro Ishiguro
  *
@@ -191,6 +192,9 @@ typedef enum {
        ZEBRA_IF_BRIDGE,    /* bridge device */
        ZEBRA_IF_VLAN,      /* VLAN sub-interface */
        ZEBRA_IF_MACVLAN,   /* MAC VLAN interface*/
+       ZEBRA_IF_VETH,      /* VETH interface*/
+       ZEBRA_IF_BOND,      /* Bond */
+       ZEBRA_IF_BOND_SLAVE,        /* Bond */
 } zebra_iftype_t;
 
 /* Zebra "slave" interface type */
@@ -198,6 +202,7 @@ typedef enum {
        ZEBRA_IF_SLAVE_NONE,   /* Not a slave */
        ZEBRA_IF_SLAVE_VRF,    /* Member of a VRF */
        ZEBRA_IF_SLAVE_BRIDGE, /* Member of a bridge */
+       ZEBRA_IF_SLAVE_BOND,   /* Bond member */
        ZEBRA_IF_SLAVE_OTHER,  /* Something else - e.g., bond slave */
 } zebra_slave_iftype_t;
 
@@ -267,6 +272,8 @@ struct zebra_if {
         */
        struct zebra_l2info_brslave brslave_info;
 
+       struct zebra_l2info_bondslave bondslave_info;
+
        /* Link fields - for sub-interfaces. */
        ifindex_t link_ifindex;
        struct interface *link;
@@ -278,6 +285,7 @@ struct zebra_if {
         * for bgp unnumbered?
         */
        bool v6_2_v4_ll_neigh_entry;
+       char neigh_mac[6];
        struct in6_addr v6_2_v4_ll_addr6;
 };
 
@@ -312,13 +320,20 @@ static inline void zebra_if_set_ziftype(struct interface *ifp,
 #define IS_ZEBRA_IF_MACVLAN(ifp)                                               \
        (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_MACVLAN)
 
-#define IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)                                          \
+#define IS_ZEBRA_IF_VETH(ifp)                                               \
+       (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_VETH)
+
+#define IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)                                  \
        (((struct zebra_if *)(ifp->info))->zif_slave_type                      \
         == ZEBRA_IF_SLAVE_BRIDGE)
 
 #define IS_ZEBRA_IF_VRF_SLAVE(ifp)                                             \
        (((struct zebra_if *)(ifp->info))->zif_slave_type == ZEBRA_IF_SLAVE_VRF)
 
+#define IS_ZEBRA_IF_BOND_SLAVE(ifp)                                    \
+       (((struct zebra_if *)(ifp->info))->zif_slave_type                      \
+        == ZEBRA_IF_SLAVE_BOND)
+
 extern void zebra_if_init(void);
 
 extern struct interface *if_lookup_by_index_per_ns(struct zebra_ns *, uint32_t);
@@ -328,6 +343,10 @@ extern struct interface *if_link_per_ns(struct zebra_ns *, struct interface *);
 extern const char *ifindex2ifname_per_ns(struct zebra_ns *, unsigned int);
 
 extern void if_unlink_per_ns(struct interface *);
+extern void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *fip,
+                                             char mac[6],
+                                             struct in6_addr *address,
+                                             int add);
 extern void if_nbr_ipv6ll_to_ipv4ll_neigh_update(struct interface *ifp,
                                                 struct in6_addr *address,
                                                 int add);
@@ -342,7 +361,9 @@ extern int if_subnet_add(struct interface *, struct connected *);
 extern int if_subnet_delete(struct interface *, struct connected *);
 extern int ipv6_address_configured(struct interface *ifp);
 extern void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id);
-extern void zebra_if_update_link(struct interface *ifp, ifindex_t link_ifindex);
+extern void zebra_if_update_link(struct interface *ifp, ifindex_t link_ifindex,
+                                ns_id_t ns_id);
+extern void zebra_if_update_all_links(void);
 
 extern void vrf_add_update(struct vrf *vrfp);