]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Add knowledge of request success/failure for pbr rules
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 25 May 2018 14:54:50 +0000 (10:54 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 30 May 2018 12:05:28 +0000 (08:05 -0400)
Add some nascent code to handle success/failure of the rule
installation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/rule_netlink.c
zebra/rule_socket.c
zebra/zebra_pbr.c
zebra/zebra_pbr.h

index fdafb2286cb777c3f12fac69e9d06e97faeadfa2..bcffdf47221e9980a4eb7d18f076322112db7d0e 100644 (file)
@@ -142,7 +142,7 @@ static int netlink_rule_update(int cmd, struct zebra_pbr_rule *rule)
  * goes in the rule to denote relative ordering; it may or may not be the
  * same as the rule's user-defined sequence number.
  */
-void kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
+enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
 {
        int ret = 0;
 
@@ -150,12 +150,14 @@ void kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
        kernel_pbr_rule_add_del_status(rule,
                                       (!ret) ? DP_INSTALL_SUCCESS
                                              : DP_INSTALL_FAILURE);
+
+       return DP_REQUEST_SUCCESS;
 }
 
 /*
  * Uninstall specified rule for a specific interface.
  */
-void kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
+enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
 {
        int ret = 0;
 
@@ -163,6 +165,8 @@ void kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
        kernel_pbr_rule_add_del_status(rule,
                                       (!ret) ? DP_DELETE_SUCCESS
                                              : DP_DELETE_FAILURE);
+
+       return DP_REQUEST_SUCCESS;
 }
 
 /*
index 46c53f9e02247730288fac16f8561dfed02d39eb..ecd642d80786b76d6aa75d7dab36e152d2114d8e 100644 (file)
 #include "zebra/rule_netlink.h"
 #include "zebra/zebra_pbr.h"
 
-void kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
+enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
 {
+       zlog_err("%s not Implemented for this platform", __PRETTY_FUNCTION__);
+       return DP_REQUEST_FAILURE;
 }
-void kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
+
+enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
 {
+       zlog_err("%s not Implemented for this platform", __PRETTY_FUNCTION__);
+       return DP_REQUEST_FAILURE;
 }
 
 #endif
index 84fb3d76a2e62fad93121dff4776d1e4a54f7c0b..775b205513318a5c4d12ed82a88c272a91d14dd9 100644 (file)
@@ -78,7 +78,7 @@ void zebra_pbr_rules_free(void *arg)
 
        rule = (struct zebra_pbr_rule *)arg;
 
-       kernel_del_pbr_rule(rule);
+       (void)kernel_del_pbr_rule(rule);
        XFREE(MTYPE_TMP, rule);
 }
 
@@ -368,7 +368,7 @@ void zebra_pbr_add_rule(struct zebra_ns *zns, struct zebra_pbr_rule *rule)
                pbr_rule_lookup_unique(zns, rule->rule.unique, rule->ifp);
 
        (void)hash_get(zns->rules_hash, rule, pbr_rule_alloc_intern);
-       kernel_add_pbr_rule(rule);
+       (void)kernel_add_pbr_rule(rule);
        /*
         * Rule Replace semantics, if we have an old, install the
         * new rule, look above, and then delete the old
@@ -382,7 +382,7 @@ void zebra_pbr_del_rule(struct zebra_ns *zns, struct zebra_pbr_rule *rule)
        struct zebra_pbr_rule *lookup;
 
        lookup = hash_lookup(zns->rules_hash, rule);
-       kernel_del_pbr_rule(rule);
+       (void)kernel_del_pbr_rule(rule);
 
        if (lookup) {
                hash_release(zns->rules_hash, lookup);
@@ -399,7 +399,7 @@ static void zebra_pbr_cleanup_rules(struct hash_backet *b, void *data)
        int *sock = data;
 
        if (rule->sock == *sock) {
-               kernel_del_pbr_rule(rule);
+               (void)kernel_del_pbr_rule(rule);
                hash_release(zns->rules_hash, rule);
                XFREE(MTYPE_TMP, rule);
        }
index bd942b9ae67e74aef1abe768947f67ec63535c0d..6cbafd6daaed1dd771c41395d6e8fb40344c3e69 100644 (file)
@@ -162,12 +162,12 @@ void zebra_pbr_del_iptable(struct zebra_ns *zns,
  * forwarding plane may not coincide, hence the API requires a separate
  * rule priority - maps to preference/FRA_PRIORITY on Linux.
  */
-extern void kernel_add_pbr_rule(struct zebra_pbr_rule *rule);
+extern enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule);
 
 /*
  * Uninstall specified rule for a specific interface.
  */
-extern void kernel_del_pbr_rule(struct zebra_pbr_rule *rule);
+extern enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule);
 
 /*
  * Get to know existing PBR rules in the kernel - typically called at startup.