back to topotato report
topotato coverage report
Current view: top level - zebra - zebra_routemap_nb_config.c (source / functions) Hit Total Coverage
Test: test_demo.py::AllStartupTest Lines: 0 133 0.0 %
Date: 2023-02-24 18:37:51 Functions: 0 12 0.0 %

          Line data    Source code
       1             : #include <zebra.h>
       2             : 
       3             : #include "lib/command.h"
       4             : #include "lib/log.h"
       5             : #include "lib/northbound.h"
       6             : #include "lib/routemap.h"
       7             : #include "zebra/rib.h"
       8             : #include "zebra/zebra_routemap_nb.h"
       9             : 
      10             : /*
      11             :  * XPath: /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length
      12             :  */
      13             : int
      14           0 : lib_route_map_entry_match_condition_rmap_match_condition_ipv4_prefix_length_modify(
      15             :         struct nb_cb_modify_args *args)
      16             : {
      17           0 :         struct routemap_hook_context *rhc;
      18           0 :         const char *length;
      19           0 :         int rv;
      20           0 :         const char *condition;
      21             : 
      22           0 :         switch (args->event) {
      23             :         case NB_EV_VALIDATE:
      24             :         case NB_EV_PREPARE:
      25             :         case NB_EV_ABORT:
      26             :                 return NB_OK;
      27           0 :         case NB_EV_APPLY:
      28             :                 /* Add configuration. */
      29           0 :                 rhc = nb_running_get_entry(args->dnode, NULL, true);
      30           0 :                 length = yang_dnode_get_string(args->dnode, NULL);
      31           0 :                 condition = yang_dnode_get_string(args->dnode,
      32             :                                 "../../frr-route-map:condition");
      33             : 
      34           0 :                 if (IS_MATCH_IPv4_PREFIX_LEN(condition))
      35           0 :                         rhc->rhc_rule = "ip address prefix-len";
      36           0 :                 else if (IS_MATCH_IPv4_NH_PREFIX_LEN(condition))
      37           0 :                         rhc->rhc_rule = "ip next-hop prefix-len";
      38             : 
      39           0 :                 rhc->rhc_mhook = generic_match_delete;
      40           0 :                 rhc->rhc_event = RMAP_EVENT_MATCH_DELETED;
      41             : 
      42           0 :                 rv = generic_match_add(rhc->rhc_rmi, rhc->rhc_rule,
      43             :                                        length, RMAP_EVENT_MATCH_ADDED,
      44             :                                        args->errmsg, args->errmsg_len);
      45           0 :                 if (rv != CMD_SUCCESS) {
      46           0 :                         rhc->rhc_mhook = NULL;
      47           0 :                         return NB_ERR_INCONSISTENCY;
      48             :                 }
      49             :         }
      50             : 
      51             :         return NB_OK;
      52             : }
      53             : 
      54             : int
      55           0 : lib_route_map_entry_match_condition_rmap_match_condition_ipv4_prefix_length_destroy(
      56             :         struct nb_cb_destroy_args *args)
      57             : {
      58           0 :         switch (args->event) {
      59             :         case NB_EV_VALIDATE:
      60             :         case NB_EV_PREPARE:
      61             :         case NB_EV_ABORT:
      62             :                 break;
      63           0 :         case NB_EV_APPLY:
      64           0 :                 return lib_route_map_entry_match_destroy(args);
      65             :         }
      66             : 
      67             :         return NB_OK;
      68             : }
      69             : 
      70             : /*
      71             :  * XPath: /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-zebra-route-map:ipv6-prefix-length
      72             :  */
      73             : int
      74           0 : lib_route_map_entry_match_condition_rmap_match_condition_ipv6_prefix_length_modify(
      75             :         struct nb_cb_modify_args *args)
      76             : {
      77           0 :         struct routemap_hook_context *rhc;
      78           0 :         const char *length;
      79           0 :         int rv;
      80             : 
      81           0 :         switch (args->event) {
      82             :         case NB_EV_VALIDATE:
      83             :         case NB_EV_PREPARE:
      84             :         case NB_EV_ABORT:
      85             :                 return NB_OK;
      86           0 :         case NB_EV_APPLY:
      87             :                 /* Add configuration. */
      88           0 :                 rhc = nb_running_get_entry(args->dnode, NULL, true);
      89           0 :                 length = yang_dnode_get_string(args->dnode, NULL);
      90             : 
      91             :                 /* Set destroy information. */
      92           0 :                 rhc->rhc_mhook = generic_match_delete;
      93           0 :                 rhc->rhc_rule = "ipv6 address prefix-len";
      94           0 :                 rhc->rhc_event = RMAP_EVENT_MATCH_DELETED;
      95             : 
      96           0 :                 rv = generic_match_add(rhc->rhc_rmi, "ipv6 address prefix-len",
      97             :                                 length, RMAP_EVENT_MATCH_ADDED,
      98             :                                 args->errmsg, args->errmsg_len);
      99           0 :                 if (rv != CMD_SUCCESS) {
     100           0 :                         rhc->rhc_mhook = NULL;
     101           0 :                         return NB_ERR_INCONSISTENCY;
     102             :                 }
     103             :         }
     104             : 
     105             :         return NB_OK;
     106             : }
     107             : 
     108             : int
     109           0 : lib_route_map_entry_match_condition_rmap_match_condition_ipv6_prefix_length_destroy(
     110             :         struct nb_cb_destroy_args *args)
     111             : {
     112           0 :         switch (args->event) {
     113             :         case NB_EV_VALIDATE:
     114             :         case NB_EV_PREPARE:
     115             :         case NB_EV_ABORT:
     116             :                 break;
     117           0 :         case NB_EV_APPLY:
     118           0 :                 return lib_route_map_entry_match_destroy(args);
     119             :         }
     120             : 
     121             :         return NB_OK;
     122             : 
     123             : }
     124             : 
     125             : /*
     126             :  * XPath: /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-zebra-route-map:source-instance
     127             :  */
     128             : int
     129           0 : lib_route_map_entry_match_condition_rmap_match_condition_source_instance_modify(
     130             :         struct nb_cb_modify_args *args)
     131             : {
     132           0 :         struct routemap_hook_context *rhc;
     133           0 :         const char *type;
     134           0 :         int rv;
     135             : 
     136           0 :         switch (args->event) {
     137             :         case NB_EV_VALIDATE:
     138             :         case NB_EV_PREPARE:
     139             :         case NB_EV_ABORT:
     140             :                 break;
     141           0 :         case NB_EV_APPLY:
     142             :                 /* Add configuration. */
     143           0 :                 rhc = nb_running_get_entry(args->dnode, NULL, true);
     144           0 :                 type = yang_dnode_get_string(args->dnode, NULL);
     145             : 
     146             :                 /* Set destroy information. */
     147           0 :                 rhc->rhc_mhook = generic_match_delete;
     148           0 :                 rhc->rhc_rule = "source-instance";
     149           0 :                 rhc->rhc_event = RMAP_EVENT_MATCH_DELETED;
     150             : 
     151           0 :                 rv = generic_match_add(rhc->rhc_rmi, "source-instance",
     152             :                                        type, RMAP_EVENT_MATCH_ADDED,
     153             :                                        args->errmsg, args->errmsg_len);
     154           0 :                 if (rv != CMD_SUCCESS) {
     155           0 :                         rhc->rhc_mhook = NULL;
     156           0 :                         return NB_ERR_INCONSISTENCY;
     157             :                 }
     158             :         }
     159             : 
     160             :         return NB_OK;
     161             : }
     162             : 
     163             : int
     164           0 : lib_route_map_entry_match_condition_rmap_match_condition_source_instance_destroy(
     165             :         struct nb_cb_destroy_args *args)
     166             : {
     167           0 :         switch (args->event) {
     168             :         case NB_EV_VALIDATE:
     169             :         case NB_EV_PREPARE:
     170             :         case NB_EV_ABORT:
     171             :                 break;
     172           0 :         case NB_EV_APPLY:
     173           0 :                 return lib_route_map_entry_match_destroy(args);
     174             :         }
     175             : 
     176             :         return NB_OK;
     177             : }
     178             : 
     179             : /*
     180             :  * XPath: /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-zebra-route-map:source-protocol
     181             :  */
     182             : int
     183           0 : lib_route_map_entry_match_condition_rmap_match_condition_source_protocol_modify(
     184             :         struct nb_cb_modify_args *args)
     185             : {
     186           0 :         struct routemap_hook_context *rhc;
     187           0 :         const char *type;
     188           0 :         int rv;
     189             : 
     190           0 :         switch (args->event) {
     191           0 :         case NB_EV_VALIDATE:
     192           0 :                 type = yang_dnode_get_string(args->dnode, NULL);
     193           0 :                 if (proto_name2num(type) == -1) {
     194           0 :                         zlog_warn("%s: invalid protocol: %s", __func__, type);
     195           0 :                         return NB_ERR_VALIDATION;
     196             :                 }
     197             :                 return NB_OK;
     198             :         case NB_EV_PREPARE:
     199             :         case NB_EV_ABORT:
     200             :                 return NB_OK;
     201             :         case NB_EV_APPLY:
     202             :                 /* NOTHING */
     203             :                 break;
     204             :         }
     205             : 
     206             :         /* Add configuration. */
     207           0 :         rhc = nb_running_get_entry(args->dnode, NULL, true);
     208           0 :         type = yang_dnode_get_string(args->dnode, NULL);
     209             : 
     210             :         /* Set destroy information. */
     211           0 :         rhc->rhc_mhook = generic_match_delete;
     212           0 :         rhc->rhc_rule = "source-protocol";
     213           0 :         rhc->rhc_event = RMAP_EVENT_MATCH_DELETED;
     214             : 
     215           0 :         rv = generic_match_add(rhc->rhc_rmi, "source-protocol", type,
     216             :                                RMAP_EVENT_MATCH_ADDED,
     217             :                                args->errmsg, args->errmsg_len);
     218           0 :         if (rv != CMD_SUCCESS) {
     219           0 :                 rhc->rhc_mhook = NULL;
     220           0 :                 return NB_ERR_INCONSISTENCY;
     221             :         }
     222             : 
     223             :         return NB_OK;
     224             : }
     225             : 
     226             : int
     227           0 : lib_route_map_entry_match_condition_rmap_match_condition_source_protocol_destroy(
     228             :         struct nb_cb_destroy_args *args)
     229             : {
     230           0 :         switch (args->event) {
     231             :         case NB_EV_VALIDATE:
     232             :         case NB_EV_PREPARE:
     233             :         case NB_EV_ABORT:
     234             :                 break;
     235           0 :         case NB_EV_APPLY:
     236           0 :                 return lib_route_map_entry_match_destroy(args);
     237             :         }
     238             : 
     239             :         return NB_OK;
     240             : }
     241             : 
     242             : /*
     243             :  * XPath: /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-zebra-route-map:ipv4-src-address
     244             :  */
     245             : int
     246           0 : lib_route_map_entry_set_action_rmap_set_action_ipv4_src_address_modify(
     247             :         struct nb_cb_modify_args *args)
     248             : {
     249           0 :         struct routemap_hook_context *rhc;
     250           0 :         const char *source;
     251           0 :         struct prefix p;
     252           0 :         int rv;
     253             : 
     254           0 :         switch (args->event) {
     255           0 :         case NB_EV_VALIDATE:
     256           0 :                 memset(&p, 0, sizeof(p));
     257           0 :                 yang_dnode_get_ipv4p(&p, args->dnode, NULL);
     258           0 :                 if (zebra_check_addr(&p) == 0) {
     259           0 :                         zlog_warn("%s: invalid IPv4 address: %s", __func__,
     260             :                                   yang_dnode_get_string(args->dnode, NULL));
     261           0 :                         return NB_ERR_VALIDATION;
     262             :                 }
     263             :                 return NB_OK;
     264             :         case NB_EV_PREPARE:
     265             :         case NB_EV_ABORT:
     266             :                 return NB_OK;
     267             :         case NB_EV_APPLY:
     268             :                 /* NOTHING */
     269             :                 break;
     270             :         }
     271             : 
     272             :         /* Add configuration. */
     273           0 :         rhc = nb_running_get_entry(args->dnode, NULL, true);
     274           0 :         source = yang_dnode_get_string(args->dnode, NULL);
     275             : 
     276             :         /* Set destroy information. */
     277           0 :         rhc->rhc_shook = generic_set_delete;
     278           0 :         rhc->rhc_rule = "src";
     279             : 
     280           0 :         rv = generic_set_add(rhc->rhc_rmi, "src", source,
     281             :                              args->errmsg, args->errmsg_len);
     282           0 :         if (rv != CMD_SUCCESS) {
     283           0 :                 rhc->rhc_shook = NULL;
     284           0 :                 return NB_ERR_INCONSISTENCY;
     285             :         }
     286             : 
     287             :         return NB_OK;
     288             : }
     289             : 
     290             : int
     291           0 : lib_route_map_entry_set_action_rmap_set_action_ipv4_src_address_destroy(
     292             :         struct nb_cb_destroy_args *args)
     293             : {
     294           0 :         switch (args->event) {
     295             :         case NB_EV_VALIDATE:
     296             :         case NB_EV_PREPARE:
     297             :         case NB_EV_ABORT:
     298             :                 break;
     299           0 :         case NB_EV_APPLY:
     300           0 :                 return lib_route_map_entry_set_destroy(args);
     301             :         }
     302             : 
     303             :         return NB_OK;
     304             : }
     305             : 
     306             : /*
     307             :  * XPath: /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-zebra-route-map:ipv6-src-address
     308             :  */
     309             : int
     310           0 : lib_route_map_entry_set_action_rmap_set_action_ipv6_src_address_modify(
     311             :         struct nb_cb_modify_args *args)
     312             : {
     313           0 :         struct routemap_hook_context *rhc;
     314           0 :         const char *source;
     315           0 :         struct prefix p;
     316           0 :         int rv;
     317             : 
     318           0 :         switch (args->event) {
     319           0 :         case NB_EV_VALIDATE:
     320           0 :                 memset(&p, 0, sizeof(p));
     321           0 :                 yang_dnode_get_ipv6p(&p, args->dnode, NULL);
     322           0 :                 if (zebra_check_addr(&p) == 0) {
     323           0 :                         zlog_warn("%s: invalid IPv6 address: %s", __func__,
     324             :                                   yang_dnode_get_string(args->dnode, NULL));
     325           0 :                         return NB_ERR_VALIDATION;
     326             :                 }
     327             :                 return NB_OK;
     328             :         case NB_EV_PREPARE:
     329             :         case NB_EV_ABORT:
     330             :                 return NB_OK;
     331             :         case NB_EV_APPLY:
     332             :                 /* NOTHING */
     333             :                 break;
     334             :         }
     335             : 
     336             :         /* Add configuration. */
     337           0 :         rhc = nb_running_get_entry(args->dnode, NULL, true);
     338           0 :         source = yang_dnode_get_string(args->dnode, NULL);
     339             : 
     340             :         /* Set destroy information. */
     341           0 :         rhc->rhc_shook = generic_set_delete;
     342           0 :         rhc->rhc_rule = "src";
     343             : 
     344           0 :         rv = generic_set_add(rhc->rhc_rmi, "src", source,
     345             :                              args->errmsg, args->errmsg_len);
     346           0 :         if (rv != CMD_SUCCESS) {
     347           0 :                 rhc->rhc_shook = NULL;
     348           0 :                 return NB_ERR_INCONSISTENCY;
     349             :         }
     350             : 
     351             :         return NB_OK;
     352             : }
     353             : 
     354             : int
     355           0 : lib_route_map_entry_set_action_rmap_set_action_ipv6_src_address_destroy(
     356             :         struct nb_cb_destroy_args *args)
     357             : {
     358           0 :         switch (args->event) {
     359             :         case NB_EV_VALIDATE:
     360             :         case NB_EV_PREPARE:
     361             :         case NB_EV_ABORT:
     362             :                 break;
     363           0 :         case NB_EV_APPLY:
     364           0 :                 return lib_route_map_entry_set_destroy(args);
     365             :         }
     366             : 
     367             :         return NB_OK;
     368             : }

Generated by: LCOV version v1.16-topotato