| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifndef __PBR_MAP_H__ |
| #define __PBR_MAP_H__ |
| |
| #include <bitfield.h> |
| |
| struct pbr_map { |
| |
| |
| |
| RB_ENTRY(pbr_map) pbr_map_entry; |
| |
| |
| |
| |
| #define PBR_MAP_NAMELEN 100 |
| char name[PBR_MAP_NAMELEN]; |
| |
| struct list *seqnumbers; |
| |
| |
| |
| |
| |
| struct list *incoming; |
| |
| bitfield_t ifi_bitfield; |
| |
| |
| |
| |
| |
| bool valid; |
| }; |
| |
| RB_HEAD(pbr_map_entry_head, pbr_map); |
| RB_PROTOTYPE(pbr_map_entry_head, pbr_map, pbr_map_entry, pbr_map_compare) |
| |
| struct pbr_map_interface { |
| uint32_t install_bit; |
| |
| struct interface *ifp; |
| |
| struct pbr_map *pbrm; |
| |
| bool delete; |
| }; |
| |
| struct pbr_map_sequence { |
| struct pbr_map *parent; |
| |
| |
| |
| |
| uint32_t unique; |
| |
| |
| |
| |
| uint32_t seqno; |
| |
| |
| |
| |
| uint32_t ruleno; |
| |
| |
| |
| |
| struct prefix *src; |
| struct prefix *dst; |
| |
| |
| |
| |
| unsigned char family; |
| |
| |
| |
| |
| |
| |
| struct nexthop_group *nhg; |
| char *internal_nhg_name; |
| |
| |
| |
| |
| |
| char *nhgrp_name; |
| |
| |
| |
| |
| bool nhs_installed; |
| |
| |
| |
| |
| uint64_t installed; |
| |
| |
| |
| |
| |
| #define PBR_MAP_VALID_SEQUENCE_NUMBER 0 |
| #define PBR_MAP_INVALID_NEXTHOP_GROUP (1 << 0) |
| #define PBR_MAP_INVALID_NEXTHOP (1 << 1) |
| #define PBR_MAP_INVALID_NO_NEXTHOPS (1 << 2) |
| #define PBR_MAP_INVALID_BOTH_NHANDGRP (1 << 3) |
| #define PBR_MAP_INVALID_SRCDST (1 << 4) |
| uint64_t reason; |
| |
| QOBJ_FIELDS |
| }; |
| |
| DECLARE_QOBJ_TYPE(pbr_map_sequence) |
| |
| extern struct pbr_map_entry_head pbr_maps; |
| |
| extern struct pbr_map_sequence *pbrms_get(const char *name, uint32_t seqno); |
| extern struct pbr_map_sequence * |
| pbrms_lookup_unique(uint32_t unique, ifindex_t ifindex, |
| struct pbr_map_interface **ppmi); |
| |
| extern struct pbr_map *pbrm_find(const char *name); |
| extern void pbr_map_delete(struct pbr_map_sequence *pbrms); |
| extern void pbr_map_delete_nexthop_group(struct pbr_map_sequence *pbrms); |
| extern void pbr_map_add_interface(struct pbr_map *pbrm, struct interface *ifp); |
| extern void pbr_map_interface_delete(struct pbr_map *pbrm, |
| struct interface *ifp); |
| extern void pbr_map_write_interfaces(struct vty *vty, struct interface *ifp); |
| extern void pbr_map_init(void); |
| |
| extern bool pbr_map_check_valid(const char *name); |
| |
| extern void pbr_map_check(struct pbr_map_sequence *pbrms); |
| extern void pbr_map_check_nh_group_change(const char *nh_group); |
| extern void pbr_map_reason_string(unsigned int reason, char *buf, int size); |
| |
| extern void pbr_map_schedule_policy_from_nhg(const char *nh_group); |
| |
| extern void pbr_map_install(struct pbr_map *pbrm); |
| |
| extern void pbr_map_policy_install(const char *name); |
| extern void pbr_map_policy_delete(struct pbr_map *pbrm, |
| struct pbr_map_interface *pmi); |
| #endif |