summaryrefslogtreecommitdiff
path: root/pbrd/pbr_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'pbrd/pbr_map.h')
-rw-r--r--pbrd/pbr_map.h69
1 files changed, 53 insertions, 16 deletions
diff --git a/pbrd/pbr_map.h b/pbrd/pbr_map.h
index c9da431b38..9fb674bd6e 100644
--- a/pbrd/pbr_map.h
+++ b/pbrd/pbr_map.h
@@ -3,6 +3,9 @@
* PBR-map Header
* Copyright (C) 2018 Cumulus Networks, Inc.
* Donald Sharp
+ * Portions:
+ * Copyright (c) 2023 LabN Consulting, L.L.C.
+ * Copyright (c) 2021 The MITRE Corporation
*/
#ifndef __PBR_MAP_H__
#define __PBR_MAP_H__
@@ -53,6 +56,14 @@ struct pbr_map_interface {
bool delete;
};
+enum pbr_forwarding_type {
+ PBR_FT_UNSPEC = 0,
+ PBR_FT_VRF_UNCHANGED,
+ PBR_FT_SETVRF,
+ PBR_FT_NEXTHOP_GROUP,
+ PBR_FT_NEXTHOP_SINGLE,
+};
+
struct pbr_map_sequence {
struct pbr_map *parent;
@@ -71,40 +82,64 @@ struct pbr_map_sequence {
*/
uint32_t ruleno;
+
+ /*****************************************************************
+ * Filter fields
+ * gpz 230716: I hope to replace all of the filter fields with
+ * 'struct pbr_filter' from lib/pbr.h.
+ *****************************************************************/
+
/*
- * src and dst ports
+ * same bit definitions as in lib/pbr.h
*/
+ uint32_t filter_bm;
+
+ /* Family of the src/dst. Needed when deleting since we clear them */
+ unsigned char family;
+
+ /* src and dst IP addresses */
+ struct prefix *src;
+ struct prefix *dst;
+
+ /* src and dst UDP/TCP ports */
uint16_t src_prt;
uint16_t dst_prt;
- /*
- * The ip protocol we want to match on
- */
uint8_t ip_proto;
- /*
- * Our policy Catchers
- */
- struct prefix *src;
- struct prefix *dst;
+ uint8_t match_pcp;
+ uint16_t match_vlan_id; /* bits defined in lib/pbr.h */
+
+ uint16_t match_vlan_flags;
+
uint8_t dsfield;
uint32_t mark;
+ /*****************************************************************
+ * Action fields
+ *****************************************************************/
+
/*
- * Actions
+ * same bit definitions as in lib/pbr.h
*/
+ uint32_t action_bm;
+
+ union sockunion action_src;
+ union sockunion action_dst;
+
+ uint16_t action_src_port;
+ uint16_t action_dst_port;
+
+ uint8_t action_dscp;
+ uint8_t action_ecn;
+
uint8_t action_pcp;
uint8_t action_vlan_id;
-#define PBR_MAP_STRIP_INNER_ANY (1 << 0)
- uint8_t action_vlan_flags;
#define PBR_MAP_UNDEFINED_QUEUE_ID 0
uint32_t action_queue_id;
- /*
- * Family of the src/dst. Needed when deleting since we clear them
- */
- unsigned char family;
+ enum pbr_forwarding_type forwarding_type;
/*
* Use interface's vrf.
@@ -216,6 +251,8 @@ extern void pbr_map_policy_install(const char *name);
extern void pbr_map_policy_delete(struct pbr_map *pbrm,
struct pbr_map_interface *pmi);
+extern void pbr_map_sequence_delete(struct pbr_map_sequence *pbrms);
+
extern void pbr_map_check_vrf_nh_group_change(const char *nh_group,
struct pbr_vrf *pbr_vrf,
uint32_t old_vrf_id);