static void bgp_l3nhg_add_cb(const char *name)
{
}
+
+static void bgp_l3nhg_modify_cb(const struct nexthop_group_cmd *nhgc)
+{
+}
+
static void bgp_l3nhg_add_nexthop_cb(const struct nexthop_group_cmd *nhgc,
const struct nexthop *nhop)
{
}
+
static void bgp_l3nhg_del_nexthop_cb(const struct nexthop_group_cmd *nhgc,
const struct nexthop *nhop)
{
}
+
static void bgp_l3nhg_del_cb(const char *name)
{
}
bgp_l3nhg_zebra_inited = true;
bgp_l3nhg_start = zclient_get_nhg_start(ZEBRA_ROUTE_BGP);
- nexthop_group_init(bgp_l3nhg_add_cb, bgp_l3nhg_add_nexthop_cb,
- bgp_l3nhg_del_nexthop_cb, bgp_l3nhg_del_cb);
+ nexthop_group_init(bgp_l3nhg_add_cb, bgp_l3nhg_modify_cb,
+ bgp_l3nhg_add_nexthop_cb, bgp_l3nhg_del_nexthop_cb,
+ bgp_l3nhg_del_cb);
}
struct nexthop_group_hooks {
void (*new)(const char *name);
+ void (*modify)(const struct nexthop_group_cmd *nhgc);
void (*add_nexthop)(const struct nexthop_group_cmd *nhg,
const struct nexthop *nhop);
void (*del_nexthop)(const struct nexthop_group_cmd *nhg,
nhgc->nhg.nhgr.idle_timer = idle_timer;
nhgc->nhg.nhgr.unbalanced_timer = unbalanced_timer;
+ if (nhg_hooks.modify)
+ nhg_hooks.modify(nhgc);
+
return CMD_SUCCESS;
}
{.completions = NULL}};
void nexthop_group_init(void (*new)(const char *name),
+ void (*modify)(const struct nexthop_group_cmd *nhgc),
void (*add_nexthop)(const struct nexthop_group_cmd *nhg,
const struct nexthop *nhop),
void (*del_nexthop)(const struct nexthop_group_cmd *nhg,
if (new)
nhg_hooks.new = new;
+ if (modify)
+ nhg_hooks.modify = modify;
if (add_nexthop)
nhg_hooks.add_nexthop = add_nexthop;
if (del_nexthop)
* a nexthop_group is added/deleted/modified, then set the
* appropriate callback functions to handle it in your
* code
+ *
+ * create - The creation of the nexthop group
+ * modify - Modification of the nexthop group when not changing a nexthop
+ * ( resilience as an example )
+ * add_nexthop - A nexthop is added to the NHG
+ * del_nexthop - A nexthop is deleted from the NHG
+ * destroy - The NHG is deleted
*/
void nexthop_group_init(
void (*create)(const char *name),
+ void (*modify)(const struct nexthop_group_cmd *nhgc),
void (*add_nexthop)(const struct nexthop_group_cmd *nhgc,
const struct nexthop *nhop),
void (*del_nexthop)(const struct nexthop_group_cmd *nhgc,
pbr_debug_init();
- nexthop_group_init(pbr_nhgroup_add_cb,
+ nexthop_group_init(pbr_nhgroup_add_cb, pbr_nhgroup_modify_cb,
pbr_nhgroup_add_nexthop_cb,
- pbr_nhgroup_del_nexthop_cb,
- pbr_nhgroup_delete_cb);
+ pbr_nhgroup_del_nexthop_cb, pbr_nhgroup_delete_cb);
/*
* So we safely ignore these commands since
pbr_map_check_nh_group_change(name);
}
+void pbr_nhgroup_modify_cb(const struct nexthop_group_cmd *nhgc)
+{
+}
+
void pbr_nhgroup_add_nexthop_cb(const struct nexthop_group_cmd *nhgc,
const struct nexthop *nhop)
{
extern uint32_t pbr_nht_get_next_rule(uint32_t seqno);
extern void pbr_nhgroup_add_cb(const char *name);
+extern void pbr_nhgroup_modify_cb(const struct nexthop_group_cmd *nhgc);
extern void pbr_nhgroup_add_nexthop_cb(const struct nexthop_group_cmd *nhg,
const struct nexthop *nhop);
extern void pbr_nhgroup_del_nexthop_cb(const struct nexthop_group_cmd *nhg,
sharp_nhg_rb_add(&nhg_head, snhg);
}
+static void sharp_nhgroup_modify_cb(const struct nexthop_group_cmd *nhgc)
+{
+}
+
static void sharp_nhgroup_add_nexthop_cb(const struct nexthop_group_cmd *nhgc,
const struct nexthop *nhop)
{
sharp_nhg_rb_init(&nhg_head);
nhg_id = zclient_get_nhg_start(ZEBRA_ROUTE_SHARP);
- nexthop_group_init(sharp_nhgroup_add_cb, sharp_nhgroup_add_nexthop_cb,
+ nexthop_group_init(sharp_nhgroup_add_cb, sharp_nhgroup_modify_cb,
+ sharp_nhgroup_add_nexthop_cb,
sharp_nhgroup_del_nexthop_cb,
sharp_nhgroup_delete_cb);
}