#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 */