#include "table.h"
#include "memory.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
DECLARE_MGROUP(STATIC);
/* Static route label information */
* The order for below macros should be in sync with
* yang model typedef nexthop-type
*/
-typedef enum {
+enum static_nh_type {
STATIC_IFNAME = 1,
STATIC_IPV4_GATEWAY,
STATIC_IPV4_GATEWAY_IFNAME,
STATIC_IPV6_GATEWAY,
STATIC_IPV6_GATEWAY_IFNAME,
STATIC_BLACKHOLE,
-} static_types;
+};
/*
* Route Creation gives us:
/* Static route information */
struct static_route_info {
+ struct static_vrf *svrf;
+ safi_t safi;
/* path list */
struct static_path_list_head path_list;
};
/* Static path information */
struct static_path {
+ /* Route node back pointer. */
+ struct route_node *rn;
/* Linkage for static path lists */
struct static_path_list_item list;
/* Administrative distance. */
/* Static route information. */
struct static_nexthop {
+ /* Path back pointer. */
+ struct static_path *pn;
/* For linked list. */
struct static_nexthop_list_item list;
enum static_install_states state;
/* Flag for this static route's type. */
- static_types type;
+ enum static_nh_type type;
/*
* Nexthop value.
}
extern bool mpls_enabled;
+extern uint32_t zebra_ecmp_count;
extern struct zebra_privs_t static_privs;
void static_fixup_vrf_ids(struct static_vrf *svrf);
extern struct static_nexthop *
-static_add_nexthop(struct route_node *rn, struct static_path *pn, safi_t safi,
- struct static_vrf *svrf, static_types type,
+static_add_nexthop(struct static_path *pn, enum static_nh_type type,
struct ipaddr *ipaddr, const char *ifname,
const char *nh_vrf, uint32_t color);
-extern void static_install_nexthop(struct route_node *rn,
- struct static_path *pn,
- struct static_nexthop *nh, safi_t safi,
- struct static_vrf *svrf, const char *ifname,
- static_types type, const char *nh_vrf);
+extern void static_install_nexthop(struct static_nexthop *nh);
-extern int static_delete_nexthop(struct route_node *rn, struct static_path *pn,
- safi_t safi, struct static_vrf *svrf,
- struct static_nexthop *nh);
+extern void static_delete_nexthop(struct static_nexthop *nh);
extern void static_cleanup_vrf_ids(struct static_vrf *disable_svrf);
extern void static_ifindex_update(struct interface *ifp, bool up);
-extern void static_install_path(struct route_node *rn, struct static_path *pn,
- safi_t safi, struct static_vrf *svrf);
+extern void static_install_path(struct static_path *pn);
extern struct route_node *static_add_route(afi_t afi, safi_t safi,
struct prefix *p,
struct prefix_ipv6 *src_p,
struct static_vrf *svrf);
-extern void static_del_route(struct route_node *rn, safi_t safi,
- struct static_vrf *svrf);
+extern void static_del_route(struct route_node *rn);
extern struct static_path *static_add_path(struct route_node *rn,
uint32_t table_id, uint8_t distance);
-extern void static_del_path(struct route_node *rn, struct static_path *pn,
- safi_t safi, struct static_vrf *svrf);
+extern void static_del_path(struct static_path *pn);
-extern void static_get_nh_type(static_types stype, char *type, size_t size);
+extern void static_get_nh_type(enum static_nh_type stype, char *type,
+ size_t size);
extern bool static_add_nexthop_validate(const char *nh_vrf_name,
- static_types type,
+ enum static_nh_type type,
struct ipaddr *ipaddr);
extern struct stable_info *static_get_stable_info(struct route_node *rn);
-extern void static_route_info_init(struct static_route_info *si);
extern void zebra_stable_node_cleanup(struct route_table *table,
struct route_node *node);
*/
extern void static_get_nh_str(struct static_nexthop *nh, char *nexthop,
size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif