]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_rnh.h
isisd: implement the 'lsp-too-large' notification
[mirror_frr.git] / zebra / zebra_rnh.h
index d26b7be25039a58599a45609a5e9ff085d7456ba..33302f0ee27dc5d083fc4123761edbbf63bbdab9 100644 (file)
 #include "vty.h"
 
 /* Nexthop structure. */
-struct rnh
-{
-  u_char flags;
+struct rnh {
+       uint8_t flags;
 
 #define ZEBRA_NHT_CONNECTED    0x1
 #define ZEBRA_NHT_DELETED       0x2
 #define ZEBRA_NHT_EXACT_MATCH   0x4
 
-  /* VRF identifier. */
-  vrf_id_t vrf_id;
+       /* VRF identifier. */
+       vrf_id_t vrf_id;
+
+       struct route_entry *state;
+       struct prefix resolved_route;
+       struct list *client_list;
+
+       /* pseudowires dependent on this nh */
+       struct list *zebra_pseudowire_list;
+
+       struct route_node *node;
 
-  struct route_entry *state;
-  struct prefix resolved_route;
-  struct list *client_list;
-  struct list *zebra_static_route_list; /* static routes dependent on this NH */
-  struct route_node *node;
-  int filtered[ZEBRA_ROUTE_MAX]; /* if this has been filtered for client */
+       /*
+        * if this has been filtered for the client
+        */
+       int filtered[ZEBRA_ROUTE_MAX];
 };
 
-typedef enum
-  {
-    RNH_NEXTHOP_TYPE,
-    RNH_IMPORT_CHECK_TYPE
-  } rnh_type_t;
+typedef enum { RNH_NEXTHOP_TYPE, RNH_IMPORT_CHECK_TYPE } rnh_type_t;
 
 extern int zebra_rnh_ip_default_route;
 extern int zebra_rnh_ipv6_default_route;
 
+extern void zebra_rnh_init(void);
+
+static inline int rnh_resolve_via_default(int family)
+{
+       if (((family == AF_INET) && zebra_rnh_ip_default_route)
+           || ((family == AF_INET6) && zebra_rnh_ipv6_default_route))
+               return 1;
+       else
+               return 0;
+}
+
 extern struct rnh *zebra_add_rnh(struct prefix *p, vrf_id_t vrfid,
-                                rnh_type_t type);
+                                rnh_type_t type, bool *exists);
 extern struct rnh *zebra_lookup_rnh(struct prefix *p, vrf_id_t vrfid,
                                    rnh_type_t type);
-extern void zebra_free_rnh (struct rnh *rnh);
+extern void zebra_free_rnh(struct rnh *rnh);
 extern void zebra_delete_rnh(struct rnh *rnh, rnh_type_t type);
-extern void zebra_add_rnh_client(struct rnh *rnh, struct zserv *client, rnh_type_t type,
-                                 vrf_id_t vrfid);
-extern void zebra_register_rnh_static_nh(vrf_id_t, struct prefix *, struct route_node *);
-extern void zebra_deregister_rnh_static_nexthops (vrf_id_t, struct nexthop *nexthop,
-                                                  struct route_node *rn);
-extern void zebra_deregister_rnh_static_nh(vrf_id_t, struct prefix *, struct route_node *);
+extern void zebra_add_rnh_client(struct rnh *rnh, struct zserv *client,
+                                rnh_type_t type, vrf_id_t vrfid);
+extern void zebra_register_rnh_pseudowire(vrf_id_t, struct zebra_pw *);
+extern void zebra_deregister_rnh_pseudowire(vrf_id_t, struct zebra_pw *);
 extern void zebra_remove_rnh_client(struct rnh *rnh, struct zserv *client,
                                    rnh_type_t type);
-extern void zebra_evaluate_rnh(vrf_id_t vrfid, int family, int force, rnh_type_t type,
-                             struct prefix *p);
-extern void zebra_print_rnh_table(vrf_id_t vrfid, int family, struct vty *vty, rnh_type_t);
+extern void zebra_evaluate_rnh(struct zebra_vrf *zvrf, int family, int force,
+                              rnh_type_t type, struct prefix *p);
+extern void zebra_print_rnh_table(vrf_id_t vrfid, int family, struct vty *vty,
+                                 rnh_type_t);
 extern char *rnh_str(struct rnh *rnh, char *buf, int size);
-extern int zebra_cleanup_rnh_client(vrf_id_t vrf, int family, struct zserv *client,
-                                   rnh_type_t type);
 #endif /*_ZEBRA_RNH_H */