diff options
| author | Igor Ryzhov <iryzhov@nfware.com> | 2024-01-24 23:04:23 +0200 |
|---|---|---|
| committer | Igor Ryzhov <iryzhov@nfware.com> | 2024-01-28 23:28:40 +0200 |
| commit | 390081329874c4fd8b4a15ffa2a090275b5fc8ac (patch) | |
| tree | 632835cad70bf321e2f0d2acaf9d59c11a3925fe /zebra/interface.c | |
| parent | 42d6b864cdce2e4477a14eae639bc22aa9fc1118 (diff) | |
zebra: convert to mgmtd
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 974 |
1 files changed, 0 insertions, 974 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 62ff676f48..cba052dff6 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -18,7 +18,6 @@ #include "log.h" #include "zclient.h" #include "vrf.h" -#include "lib/northbound_cli.h" #include "zebra/rtadv.h" #include "zebra_ns.h" @@ -37,7 +36,6 @@ #include "zebra/zebra_vxlan.h" #include "zebra/zebra_errors.h" #include "zebra/zebra_evpn_mh.h" -#include "zebra/zebra_nb.h" DEFINE_MTYPE_STATIC(ZEBRA, ZINFO, "Zebra Interface Information"); @@ -3685,36 +3683,6 @@ void if_arp(struct interface *ifp, bool enable) if_refresh(ifp); } -DEFPY_YANG (multicast_new, - multicast_new_cmd, - "[no] multicast <enable$on|disable$off>", - NO_STR - "Control multicast flag on interface\n" - "Set multicast flag on interface\n" - "Unset multicast flag on interface\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast", - NB_OP_CREATE, on ? "true" : "false"); - else - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast", - NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_multicast_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - bool multicast = yang_dnode_get_bool(dnode, NULL); - - if (multicast) - vty_out(vty, " multicast enable\n"); - else - vty_out(vty, " multicast disable\n"); -} - int if_multicast_set(struct interface *ifp) { struct zebra_if *if_data; @@ -3733,47 +3701,6 @@ int if_multicast_set(struct interface *ifp) return 0; } -DEFUN_HIDDEN (multicast, - multicast_cmd, - "multicast", - "Set multicast flag to interface\n") -{ - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast", - NB_OP_CREATE, "true"); - - return nb_cli_apply_changes(vty, NULL); -} - -DEFPY_YANG (mpls, - mpls_cmd, - "[no] mpls <enable$on|disable$off>", - NO_STR - MPLS_STR - "Set mpls to be on for the interface\n" - "Set mpls to be off for the interface\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls", - NB_OP_CREATE, on ? "true" : "false"); - else - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls", - NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_mpls_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - bool mpls = yang_dnode_get_bool(dnode, NULL); - - if (mpls) - vty_out(vty, " mpls enable\n"); - else - vty_out(vty, " mpls disable\n"); -} - int if_multicast_unset(struct interface *ifp) { struct zebra_if *if_data; @@ -3792,18 +3719,6 @@ int if_multicast_unset(struct interface *ifp) return 0; } -DEFUN_HIDDEN (no_multicast, - no_multicast_cmd, - "no multicast", - NO_STR - "Unset multicast flag to interface\n") -{ - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast", - NB_OP_CREATE, "false"); - - return nb_cli_apply_changes(vty, NULL); -} - int if_linkdetect(struct interface *ifp, bool detect) { int if_was_operative; @@ -3827,30 +3742,6 @@ int if_linkdetect(struct interface *ifp, bool detect) return 0; } -DEFPY_YANG (linkdetect, - linkdetect_cmd, - "[no] link-detect", - NO_STR - "Enable link detection on interface\n") -{ - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-detect", - NB_OP_CREATE, no ? "false" : "true"); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_detect_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - bool link_detect = yang_dnode_get_bool(dnode, NULL); - - if (!link_detect) - vty_out(vty, " no link-detect\n"); - else if (show_defaults) - vty_out(vty, " link-detect\n"); -} - int if_shutdown(struct interface *ifp) { struct zebra_if *if_data; @@ -3870,30 +3761,6 @@ int if_shutdown(struct interface *ifp) return 0; } -DEFPY_YANG (shutdown_if, - shutdown_if_cmd, - "[no] shutdown", - NO_STR - "Shutdown the selected interface\n") -{ - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/enabled", - NB_OP_CREATE, no ? "true" : "false"); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_enabled_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - bool enabled = yang_dnode_get_bool(dnode, NULL); - - if (!enabled) - vty_out(vty, " shutdown\n"); - else if (show_defaults) - vty_out(vty, " no shutdown\n"); -} - int if_no_shutdown(struct interface *ifp) { struct zebra_if *if_data; @@ -3918,39 +3785,6 @@ int if_no_shutdown(struct interface *ifp) return 0; } -DEFPY_YANG (bandwidth_if, - bandwidth_if_cmd, - "[no] bandwidth ![(1-100000)]$bw", - NO_STR - "Set bandwidth informational parameter\n" - "Bandwidth in megabits\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth", - NB_OP_CREATE, bw_str); - else - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth", - NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_bandwidth_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - uint32_t bandwidth = yang_dnode_get_uint32(dnode, NULL); - - vty_out(vty, " bandwidth %u\n", bandwidth); -} - -struct cmd_node link_params_node = { - .name = "link-params", - .node = LINK_PARAMS_NODE, - .parent_node = INTERFACE_NODE, - .prompt = "%s(config-link-params)# ", -}; - void link_param_cmd_set_uint32(struct interface *ifp, uint32_t *field, uint32_t type, uint32_t value) { @@ -3995,600 +3829,6 @@ void link_param_cmd_unset(struct interface *ifp, uint32_t type) zebra_interface_parameters_update(ifp); } -DEFUN_YANG_NOSH (link_params, - link_params_cmd, - "link-params", - LINK_PARAMS_STR) -{ - int ret; - - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_CREATE, NULL); - - ret = nb_cli_apply_changes(vty, NULL); - if (ret == CMD_SUCCESS) { - char xpath[XPATH_MAXLEN]; - snprintf(xpath, sizeof(xpath), "%s/frr-zebra:zebra/link-params", VTY_CURR_XPATH); - VTY_PUSH_XPATH(LINK_PARAMS_NODE, xpath); - } - - return ret; -} - -DEFUN_NOSH (exit_link_params, - exit_link_params_cmd, - "exit-link-params", - "Exit from Link Params configuration mode\n") -{ - cmd_exit(vty); - return CMD_SUCCESS; -} - -void lib_interface_zebra_link_params_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - vty_out(vty, " link-params\n"); -} - -void lib_interface_zebra_link_params_cli_write_end(struct vty *vty, - const struct lyd_node *dnode) -{ - vty_out(vty, " exit-link-params\n"); -} - -DEFUN_YANG (no_link_params, - no_link_params_cmd, - "no link-params", - NO_STR - LINK_PARAMS_STR) -{ - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -/* Specific Traffic Engineering parameters commands */ -DEFUN_HIDDEN (link_params_enable, - link_params_enable_cmd, - "enable", - "Activate link parameters on this interface\n") -{ - vty_out(vty, "This command is deprecated. Link parameters are activated when \"link-params\" node is entered.\n"); - - return CMD_SUCCESS; -} - -DEFUN_NOSH (no_link_params_enable, - no_link_params_enable_cmd, - "no enable", - NO_STR - "Disable link parameters on this interface\n") -{ - int ret; - - vty_out(vty, "This command is deprecated. To disable link parameters use \"no link-params\" in the interface node.\n"); - - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - - ret = nb_cli_apply_changes(vty, NULL); - if (ret == CMD_SUCCESS) - cmd_exit(vty); - - return ret; -} - -/* STANDARD TE metrics */ -DEFPY_YANG (link_params_metric, - link_params_metric_cmd, - "[no] metric ![(0-4294967295)]$metric", - NO_STR - "Link metric for MPLS-TE purpose\n" - "Metric value in decimal\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./metric", NB_OP_MODIFY, metric_str); - else - nb_cli_enqueue_change(vty, "./metric", NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_metric_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - uint32_t metric = yang_dnode_get_uint32(dnode, NULL); - - vty_out(vty, " metric %u\n", metric); -} - -DEFPY_YANG (link_params_maxbw, - link_params_maxbw_cmd, - "max-bw BANDWIDTH", - "Maximum bandwidth that can be used\n" - "Bytes/second (IEEE floating point format)\n") -{ - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, "./max-bandwidth", NB_OP_MODIFY, value); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_max_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - float max_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, NULL); - - vty_out(vty, " max-bw %g\n", max_bandwidth); -} - -DEFPY_YANG (link_params_max_rsv_bw, - link_params_max_rsv_bw_cmd, - "max-rsv-bw BANDWIDTH", - "Maximum bandwidth that may be reserved\n" - "Bytes/second (IEEE floating point format)\n") -{ - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, "./max-reservable-bandwidth", NB_OP_MODIFY, - value); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - float max_reservable_bandwidth = - yang_dnode_get_bandwidth_ieee_float32(dnode, NULL); - - vty_out(vty, " max-rsv-bw %g\n", max_reservable_bandwidth); -} - -DEFPY_YANG (link_params_unrsv_bw, - link_params_unrsv_bw_cmd, - "unrsv-bw (0-7)$priority BANDWIDTH", - "Unreserved bandwidth at each priority level\n" - "Priority\n" - "Bytes/second (IEEE floating point format)\n") -{ - char xpath[XPATH_MAXLEN]; - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(xpath, sizeof(xpath), - "./unreserved-bandwidths/unreserved-bandwidth[priority='%s']/unreserved-bandwidth", - priority_str); - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, value); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - uint8_t priority = yang_dnode_get_uint8(dnode, "priority"); - float unreserved_bandwidth = - yang_dnode_get_bandwidth_ieee_float32(dnode, - "unreserved-bandwidth"); - - vty_out(vty, " unrsv-bw %u %g\n", priority, unreserved_bandwidth); -} - -DEFPY_YANG(link_params_admin_grp, link_params_admin_grp_cmd, - "admin-grp BITPATTERN", - "Administrative group membership\n" - "32-bit Hexadecimal value (e.g. 0xa1)\n") -{ - int idx_bitpattern = 1; - unsigned long value; - char value_str[11]; - - if (sscanf(argv[idx_bitpattern]->arg, "0x%lx", &value) != 1) { - vty_out(vty, "link_params_admin_grp: fscanf: %s\n", - safe_strerror(errno)); - return CMD_WARNING_CONFIG_FAILED; - } - - if (value > 0xFFFFFFFF) { - vty_out(vty, "value must be not be superior to 0xFFFFFFFF\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value_str, sizeof(value_str), "%ld", value); - - nb_cli_enqueue_change( - vty, "./legacy-admin-group", - NB_OP_MODIFY, value_str); - - return nb_cli_apply_changes(vty, NULL); -} - -DEFPY_YANG(no_link_params_admin_grp, no_link_params_admin_grp_cmd, - "no admin-grp", - NO_STR "Disable Administrative group membership on this interface\n") -{ - nb_cli_enqueue_change( - vty, "./legacy-admin-group", - NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -/* RFC5392 & RFC5316: INTER-AS */ -DEFPY_YANG (link_params_inter_as, - link_params_inter_as_cmd, - "[no] neighbor ![A.B.C.D$ip as (1-4294967295)$as]", - NO_STR - "Configure remote ASBR information (Neighbor IP address and AS number)\n" - "Remote IP address in dot decimal A.B.C.D\n" - "Remote AS number\n" - "AS number in the range <1-4294967295>\n") -{ - if (!no) { - nb_cli_enqueue_change(vty, "./neighbor", NB_OP_CREATE, NULL); - nb_cli_enqueue_change(vty, "./neighbor/remote-as", NB_OP_MODIFY, - as_str); - nb_cli_enqueue_change(vty, "./neighbor/ipv4-remote-id", - NB_OP_MODIFY, ip_str); - } else { - nb_cli_enqueue_change(vty, "./neighbor", NB_OP_DESTROY, NULL); - } - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_neighbor_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - uint32_t remote_as = yang_dnode_get_uint32(dnode, "remote-as"); - const char *ipv4_remote_id = yang_dnode_get_string(dnode, - "ipv4-remote-id"); - - vty_out(vty, " neighbor %s as %u\n", ipv4_remote_id, remote_as); -} - -/* RFC7471: OSPF Traffic Engineering (TE) Metric extensions & - * draft-ietf-isis-metric-extensions-07.txt */ -DEFPY_YANG (link_params_delay, - link_params_delay_cmd, - "[no] delay ![(0-16777215)$delay [min (0-16777215)$min max (0-16777215)$max]]", - NO_STR - "Unidirectional Average Link Delay\n" - "Average delay in micro-second as decimal (0...16777215)\n" - "Minimum delay\n" - "Minimum delay in micro-second as decimal (0...16777215)\n" - "Maximum delay\n" - "Maximum delay in micro-second as decimal (0...16777215)\n") -{ - if (!no) { - nb_cli_enqueue_change(vty, "./delay", NB_OP_MODIFY, delay_str); - if (min_str && max_str) { - nb_cli_enqueue_change(vty, "./min-max-delay", - NB_OP_CREATE, NULL); - nb_cli_enqueue_change(vty, "./min-max-delay/delay-min", - NB_OP_MODIFY, min_str); - nb_cli_enqueue_change(vty, "./min-max-delay/delay-max", - NB_OP_MODIFY, max_str); - } else { - nb_cli_enqueue_change(vty, "./min-max-delay", - NB_OP_DESTROY, NULL); - } - } else { - nb_cli_enqueue_change(vty, "./delay", NB_OP_DESTROY, NULL); - nb_cli_enqueue_change(vty, "./min-max-delay", NB_OP_DESTROY, - NULL); - } - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_delay_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - uint32_t delay = yang_dnode_get_uint32(dnode, NULL); - - vty_out(vty, " delay %u", delay); - - if (yang_dnode_exists(dnode, "../min-max-delay")) { - uint32_t delay_min = - yang_dnode_get_uint32(dnode, - "../min-max-delay/delay-min"); - uint32_t delay_max = - yang_dnode_get_uint32(dnode, - "../min-max-delay/delay-max"); - - vty_out(vty, " min %u max %u", delay_min, delay_max); - } - - vty_out(vty, "\n"); -} - -DEFPY_YANG (link_params_delay_var, - link_params_delay_var_cmd, - "[no] delay-variation ![(0-16777215)$delay_var]", - NO_STR - "Unidirectional Link Delay Variation\n" - "delay variation in micro-second as decimal (0...16777215)\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_MODIFY, - delay_var_str); - else - nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_DESTROY, - NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_delay_variation_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - uint32_t delay_variation = yang_dnode_get_uint32(dnode, NULL); - - vty_out(vty, " delay-variation %u\n", delay_variation); -} - -DEFPY_YANG( - link_params_pkt_loss, link_params_pkt_loss_cmd, - "[no] packet-loss ![PERCENTAGE]", - NO_STR - "Unidirectional Link Packet Loss\n" - "percentage of total traffic by 0.000003% step and less than 50.331642%\n") -{ - if (!no) - nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_MODIFY, - percentage); - else - nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_DESTROY, NULL); - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_packet_loss_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - double packet_loss = yang_dnode_get_dec64(dnode, NULL); - - vty_out(vty, " packet-loss %lf\n", packet_loss); -} - -DEFPY_YANG (link_params_res_bw, - link_params_res_bw_cmd, - "[no] res-bw ![BANDWIDTH]", - NO_STR - "Unidirectional Residual Bandwidth\n" - "Bytes/second (IEEE floating point format)\n") -{ - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (!no) { - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, "./residual-bandwidth", NB_OP_MODIFY, - value); - } else { - nb_cli_enqueue_change(vty, "./residual-bandwidth", - NB_OP_DESTROY, NULL); - } - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_residual_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - float residual_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, - NULL); - - vty_out(vty, " res-bw %g\n", residual_bandwidth); -} - -DEFPY_YANG (link_params_ava_bw, - link_params_ava_bw_cmd, - "[no] ava-bw ![BANDWIDTH]", - NO_STR - "Unidirectional Available Bandwidth\n" - "Bytes/second (IEEE floating point format)\n") -{ - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (!no) { - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, "./available-bandwidth", - NB_OP_MODIFY, value); - } else { - nb_cli_enqueue_change(vty, "./available-bandwidth", - NB_OP_DESTROY, NULL); - } - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_available_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - float available_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, - NULL); - - vty_out(vty, " ava-bw %g\n", available_bandwidth); -} - -DEFPY_YANG (link_params_use_bw, - link_params_use_bw_cmd, - "[no] use-bw ![BANDWIDTH]", - NO_STR - "Unidirectional Utilised Bandwidth\n" - "Bytes/second (IEEE floating point format)\n") -{ - char value[YANG_VALUE_MAXLEN]; - float bw; - - if (!no) { - if (sscanf(bandwidth, "%g", &bw) != 1) { - vty_out(vty, "Invalid bandwidth value\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - snprintf(value, sizeof(value), "%a", bw); - - nb_cli_enqueue_change(vty, "./utilized-bandwidth", NB_OP_MODIFY, - value); - } else { - nb_cli_enqueue_change(vty, "./utilized-bandwidth", - NB_OP_DESTROY, NULL); - } - - return nb_cli_apply_changes(vty, NULL); -} - -void lib_interface_zebra_link_params_utilized_bandwidth_cli_write( - struct vty *vty, const struct lyd_node *dnode, bool show_defaults) -{ - float utilized_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, - NULL); - - vty_out(vty, " use-bw %g\n", utilized_bandwidth); -} - -static int ag_change(struct vty *vty, int argc, struct cmd_token **argv, - const char *xpath_base, bool no, int start_idx) -{ - char xpath[XPATH_MAXLEN]; - - for (int i = start_idx; i < argc; i++) { - snprintf(xpath, XPATH_MAXLEN, "%s[.='%s']", xpath_base, - argv[i]->arg); - nb_cli_enqueue_change(vty, xpath, - no ? NB_OP_DESTROY : NB_OP_CREATE, NULL); - } - return nb_cli_apply_changes(vty, NULL); -} - -/* - * XPath: - * /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity - */ -DEFPY_YANG(link_params_affinity, link_params_affinity_cmd, - "[no] affinity NAME...", - NO_STR - "Interface affinities\n" - "Affinity names\n") -{ - return ag_change(vty, argc, argv, - "./affinities/affinity", - no, no ? 2 : 1); -} - - -/* - * XPath: - * /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity-mode - */ -DEFPY_YANG(link_params_affinity_mode, link_params_affinity_mode_cmd, - "affinity-mode <standard|extended|both>$affmode", - "Interface affinity mode\n" - "Standard Admin-Group only RFC3630,5305,5329\n" - "Extended Admin-Group only RFC7308 (default)\n" - "Standard and extended Admin-Group format\n") -{ - const char *xpath = "./affinity-mode"; - - nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, affmode); - - return nb_cli_apply_changes(vty, NULL); -} - -DEFPY_YANG(no_link_params_affinity_mode, no_link_params_affinity_mode_cmd, - "no affinity-mode [<standard|extended|both>]", - NO_STR - "Interface affinity mode\n" - "Standard Admin-Group only RFC3630,5305,5329\n" - "Extended Admin-Group only RFC7308 (default)\n" - "Standard and extended Admin-Group format\n") -{ - const char *xpath = "./affinity-mode"; - - nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, "extended"); - - return nb_cli_apply_changes(vty, NULL); -} - -static int ag_iter_cb(const struct lyd_node *dnode, void *arg) -{ - struct vty *vty = (struct vty *)arg; - - vty_out(vty, " %s", yang_dnode_get_string(dnode, ".")); - return YANG_ITER_CONTINUE; -} - -void cli_show_legacy_admin_group(struct vty *vty, const struct lyd_node *dnode, - bool show_defaults) -{ - vty_out(vty, " admin-grp 0x%x\n", - yang_dnode_get_uint32(dnode, NULL)); -} - -void cli_show_affinity_mode(struct vty *vty, const struct lyd_node *dnode, - bool show_defaults) -{ - enum affinity_mode affinity_mode = yang_dnode_get_enum(dnode, "."); - - if (affinity_mode == AFFINITY_MODE_STANDARD) - vty_out(vty, " affinity-mode standard\n"); - else if (affinity_mode == AFFINITY_MODE_BOTH) - vty_out(vty, " affinity-mode both\n"); - else if (affinity_mode == AFFINITY_MODE_EXTENDED && show_defaults) - vty_out(vty, " affinity-mode extended\n"); -} - -void cli_show_affinity(struct vty *vty, const struct lyd_node *dnode, - bool show_defaults) -{ - if (!yang_dnode_exists(dnode, "affinity")) - return; - - vty_out(vty, " affinity"); - yang_dnode_iterate(ag_iter_cb, vty, dnode, "affinity"); - vty_out(vty, "\n"); -} - void if_ip_address_install(struct interface *ifp, struct prefix *prefix, const char *label, struct prefix *pp) { @@ -4668,144 +3908,6 @@ void if_ip_address_uninstall(struct interface *ifp, struct prefix *prefix, UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED); } -#ifdef HAVE_NETLINK -DEFPY_YANG (ip_address, - ip_address_cmd, - "[no] ip address A.B.C.D/M [label LINE$label]", - NO_STR - "Interface Internet Protocol config commands\n" - "Set the IP address of an interface\n" - "IP address (e.g. 10.0.0.1/8)\n" - "Label of this address\n" - "Label\n") -#else -DEFPY_YANG (ip_address, - ip_address_cmd, - "[no] ip address A.B.C.D/M", - NO_STR - "Interface Internet Protocol config commands\n" - "Set the IP address of an interface\n" - "IP address (e.g. 10.0.0.1/8)\n") -#endif -{ - char ip[INET_ADDRSTRLEN + 3]; - char *mask; - - if (no) { - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - } else { - nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL); -#ifdef HAVE_NETLINK - if (label) - nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY, - label); - else - nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY, - NULL); -#endif - } - - strlcpy(ip, address_str, sizeof(ip)); - - mask = strchr(ip, '/'); - *mask = 0; - mask++; - - return nb_cli_apply_changes(vty, - "./frr-zebra:zebra/ipv4-addrs[ip='%s'][prefix-length='%s']", - ip, mask); -} - -void lib_interface_zebra_ipv4_addrs_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - const char *ip = yang_dnode_get_string(dnode, "ip"); - uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length"); - - vty_out(vty, " ip address %s/%u", ip, prefix_length); - - if (yang_dnode_exists(dnode, "label")) { - const char *label = yang_dnode_get_string(dnode, "label"); - vty_out(vty, " label %s", label); - } - - vty_out(vty, "\n"); -} - -#ifdef HAVE_NETLINK -DEFPY_YANG (ip_address_peer, - ip_address_peer_cmd, - "[no] ip address A.B.C.D peer A.B.C.D/M [label LINE$label]", - NO_STR - "Interface Internet Protocol config commands\n" - "Set the IP address of an interface\n" - "Local IP (e.g. 10.0.0.1) for P-t-P address\n" - "Specify P-t-P address\n" - "Peer IP address (e.g. 10.0.0.1/8)\n" - "Label of this address\n" - "Label\n") -#else -DEFPY_YANG (ip_address_peer, - ip_address_peer_cmd, - "[no] ip address A.B.C.D peer A.B.C.D/M", - NO_STR - "Interface Internet Protocol config commands\n" - "Set the IP address of an interface\n" - "Local IP (e.g. 10.0.0.1) for P-t-P address\n" - "Specify P-t-P address\n" - "Peer IP address (e.g. 10.0.0.1/8)\n") -#endif -{ - char peer_ip[INET_ADDRSTRLEN + 3]; - char *peer_mask; - - if (no) { - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - } else { - nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL); -#ifdef HAVE_NETLINK - if (label) - nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY, - label); - else - nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY, - NULL); -#endif - } - - strlcpy(peer_ip, peer_str, sizeof(peer_ip)); - - peer_mask = strchr(peer_ip, '/'); - *peer_mask = 0; - peer_mask++; - - return nb_cli_apply_changes( - vty, - "./frr-zebra:zebra/ipv4-p2p-addrs[ip='%s'][peer-ip='%s'][peer-prefix-length='%s']", - address_str, peer_ip, peer_mask); -} - -void lib_interface_zebra_ipv4_p2p_addrs_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - const char *ip = yang_dnode_get_string(dnode, "ip"); - const char *peer_ip = yang_dnode_get_string(dnode, "peer-ip"); - uint8_t peer_prefix_length = yang_dnode_get_uint8(dnode, - "peer-prefix-length"); - - vty_out(vty, " ip address %s peer %s/%u", ip, peer_ip, - peer_prefix_length); - - if (yang_dnode_exists(dnode, "label")) { - const char *label = yang_dnode_get_string(dnode, "label"); - vty_out(vty, " label %s", label); - } - - vty_out(vty, "\n"); -} - void if_ipv6_address_install(struct interface *ifp, struct prefix *prefix) { struct zebra_if *if_data; @@ -4872,43 +3974,6 @@ void if_ipv6_address_uninstall(struct interface *ifp, struct prefix *prefix) UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED); } -DEFPY_YANG (ipv6_address, - ipv6_address_cmd, - "[no] ipv6 address X:X::X:X/M", - NO_STR - "Interface IPv6 config commands\n" - "Set the IP address of an interface\n" - "IPv6 address (e.g. 3ffe:506::1/48)\n") -{ - char ip[INET6_ADDRSTRLEN + 4]; - char *mask; - - if (no) - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - else - nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL); - - strlcpy(ip, address_str, sizeof(ip)); - - mask = strchr(ip, '/'); - *mask = 0; - mask++; - - return nb_cli_apply_changes(vty, - "./frr-zebra:zebra/ipv6-addrs[ip='%s'][prefix-length='%s']", - ip, mask); -} - -void lib_interface_zebra_ipv6_addrs_cli_write(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults) -{ - const char *ip = yang_dnode_get_string(dnode, "ip"); - uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length"); - - vty_out(vty, " ipv6 address %s/%u\n", ip, prefix_length); -} - /* Allocate and initialize interface vector. */ void zebra_if_init(void) { @@ -4916,10 +3981,6 @@ void zebra_if_init(void) hook_register_prio(if_add, 0, if_zebra_new_hook); hook_register_prio(if_del, 0, if_zebra_delete_hook); - /* Install configuration write function. */ - if_cmd_init_default(); - install_node(&link_params_node); - install_element(VIEW_NODE, &show_interface_cmd); install_element(VIEW_NODE, &show_interface_vrf_all_cmd); install_element(VIEW_NODE, &show_interface_name_vrf_cmd); @@ -4927,39 +3988,4 @@ void zebra_if_init(void) install_element(ENABLE_NODE, &show_interface_desc_cmd); install_element(ENABLE_NODE, &show_interface_desc_vrf_all_cmd); - install_element(INTERFACE_NODE, &multicast_new_cmd); - install_element(INTERFACE_NODE, &multicast_cmd); - install_element(INTERFACE_NODE, &no_multicast_cmd); - install_element(INTERFACE_NODE, &mpls_cmd); - install_element(INTERFACE_NODE, &linkdetect_cmd); - install_element(INTERFACE_NODE, &shutdown_if_cmd); - install_element(INTERFACE_NODE, &bandwidth_if_cmd); - install_element(INTERFACE_NODE, &ip_address_cmd); - install_element(INTERFACE_NODE, &ip_address_peer_cmd); - install_element(INTERFACE_NODE, &ipv6_address_cmd); - install_element(INTERFACE_NODE, &link_params_cmd); - install_element(INTERFACE_NODE, &no_link_params_cmd); - install_default(LINK_PARAMS_NODE); - install_element(LINK_PARAMS_NODE, &link_params_enable_cmd); - install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd); - install_element(LINK_PARAMS_NODE, &link_params_metric_cmd); - install_element(LINK_PARAMS_NODE, &link_params_maxbw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_max_rsv_bw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_unrsv_bw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_admin_grp_cmd); - install_element(LINK_PARAMS_NODE, &no_link_params_admin_grp_cmd); - install_element(LINK_PARAMS_NODE, &link_params_inter_as_cmd); - install_element(LINK_PARAMS_NODE, &link_params_delay_cmd); - install_element(LINK_PARAMS_NODE, &link_params_delay_var_cmd); - install_element(LINK_PARAMS_NODE, &link_params_pkt_loss_cmd); - install_element(LINK_PARAMS_NODE, &link_params_ava_bw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_res_bw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_use_bw_cmd); - install_element(LINK_PARAMS_NODE, &link_params_affinity_cmd); - install_element(LINK_PARAMS_NODE, &link_params_affinity_mode_cmd); - install_element(LINK_PARAMS_NODE, &no_link_params_affinity_mode_cmd); - install_element(LINK_PARAMS_NODE, &exit_link_params_cmd); - - /* setup EVPN MH elements */ - zebra_evpn_interface_init(); } |
