]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_rnh.h
zebra: add struct zmsghdr
[mirror_frr.git] / zebra / zebra_rnh.h
index a75674d0cb5bd9f73fbc4a61ee1024d86f80bceb..7af1dbeaf12540d873ccec10268832ebd7057402 100644 (file)
 #include "vty.h"
 
 /* Nexthop structure. */
-struct rnh
-{
-  u_char flags;
+struct rnh {
+       u_char 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 rib *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 */
+       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 list
+               *zebra_pseudowire_list; /* pseudowires dependent on this NH */
+       struct route_node *node;
+       int filtered[ZEBRA_ROUTE_MAX]; /* if this has been filtered for client
+                                         */
 };
 
-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;
 
+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);
 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_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_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(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 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);
+extern int zebra_cleanup_rnh_client(vrf_id_t vrf, int family,
+                                   struct zserv *client, rnh_type_t type);
 #endif /*_ZEBRA_RNH_H */