mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 07:37:29 +00:00
zebra: Add knowledge of request success/failure for pbr rules
Add some nascent code to handle success/failure of the rule installation. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
1e88567226
commit
ebecd64913
@ -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
|
* goes in the rule to denote relative ordering; it may or may not be the
|
||||||
* same as the rule's user-defined sequence number.
|
* 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;
|
int ret = 0;
|
||||||
|
|
||||||
@ -150,12 +150,14 @@ void kernel_add_pbr_rule(struct zebra_pbr_rule *rule)
|
|||||||
kernel_pbr_rule_add_del_status(rule,
|
kernel_pbr_rule_add_del_status(rule,
|
||||||
(!ret) ? DP_INSTALL_SUCCESS
|
(!ret) ? DP_INSTALL_SUCCESS
|
||||||
: DP_INSTALL_FAILURE);
|
: DP_INSTALL_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Uninstall specified rule for a specific interface.
|
* 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;
|
int ret = 0;
|
||||||
|
|
||||||
@ -163,6 +165,8 @@ void kernel_del_pbr_rule(struct zebra_pbr_rule *rule)
|
|||||||
kernel_pbr_rule_add_del_status(rule,
|
kernel_pbr_rule_add_del_status(rule,
|
||||||
(!ret) ? DP_DELETE_SUCCESS
|
(!ret) ? DP_DELETE_SUCCESS
|
||||||
: DP_DELETE_FAILURE);
|
: DP_DELETE_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -41,11 +41,16 @@
|
|||||||
#include "zebra/rule_netlink.h"
|
#include "zebra/rule_netlink.h"
|
||||||
#include "zebra/zebra_pbr.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
|
#endif
|
||||||
|
@ -78,7 +78,7 @@ void zebra_pbr_rules_free(void *arg)
|
|||||||
|
|
||||||
rule = (struct zebra_pbr_rule *)arg;
|
rule = (struct zebra_pbr_rule *)arg;
|
||||||
|
|
||||||
kernel_del_pbr_rule(rule);
|
(void)kernel_del_pbr_rule(rule);
|
||||||
XFREE(MTYPE_TMP, 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);
|
pbr_rule_lookup_unique(zns, rule->rule.unique, rule->ifp);
|
||||||
|
|
||||||
(void)hash_get(zns->rules_hash, rule, pbr_rule_alloc_intern);
|
(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
|
* Rule Replace semantics, if we have an old, install the
|
||||||
* new rule, look above, and then delete the old
|
* 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;
|
struct zebra_pbr_rule *lookup;
|
||||||
|
|
||||||
lookup = hash_lookup(zns->rules_hash, rule);
|
lookup = hash_lookup(zns->rules_hash, rule);
|
||||||
kernel_del_pbr_rule(rule);
|
(void)kernel_del_pbr_rule(rule);
|
||||||
|
|
||||||
if (lookup) {
|
if (lookup) {
|
||||||
hash_release(zns->rules_hash, 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;
|
int *sock = data;
|
||||||
|
|
||||||
if (rule->sock == *sock) {
|
if (rule->sock == *sock) {
|
||||||
kernel_del_pbr_rule(rule);
|
(void)kernel_del_pbr_rule(rule);
|
||||||
hash_release(zns->rules_hash, rule);
|
hash_release(zns->rules_hash, rule);
|
||||||
XFREE(MTYPE_TMP, rule);
|
XFREE(MTYPE_TMP, rule);
|
||||||
}
|
}
|
||||||
|
@ -162,12 +162,12 @@ void zebra_pbr_del_iptable(struct zebra_ns *zns,
|
|||||||
* forwarding plane may not coincide, hence the API requires a separate
|
* forwarding plane may not coincide, hence the API requires a separate
|
||||||
* rule priority - maps to preference/FRA_PRIORITY on Linux.
|
* 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.
|
* 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.
|
* Get to know existing PBR rules in the kernel - typically called at startup.
|
||||||
|
Loading…
Reference in New Issue
Block a user