X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=bgpd%2Fbgp_community.h;h=74a3a6b50715be06cf8a3e1c6d1fa9e56f04d28b;hb=f94ed830df98218447f00b97f856de811bfcc4a2;hp=5016f132f209ce95d0318adb8097f36d1534b192;hpb=67f1e3aa18a5b7356a3ea91e5188aff814d4a6ac;p=mirror_frr.git diff --git a/bgpd/bgp_community.h b/bgpd/bgp_community.h index 5016f132f..74a3a6b50 100644 --- a/bgpd/bgp_community.h +++ b/bgpd/bgp_community.h @@ -22,6 +22,7 @@ #define _QUAGGA_BGP_COMMUNITY_H #include "lib/json.h" +#include "bgpd/bgp_route.h" /* Communities attribute. */ struct community { @@ -32,7 +33,7 @@ struct community { int size; /* Communities value. */ - u_int32_t *val; + uint32_t *val; /* Communities as a json object */ json_object *json; @@ -43,12 +44,22 @@ struct community { }; /* Well-known communities value. */ -#define COMMUNITY_INTERNET 0x0 -#define COMMUNITY_NO_EXPORT 0xFFFFFF01 -#define COMMUNITY_NO_ADVERTISE 0xFFFFFF02 -#define COMMUNITY_NO_EXPORT_SUBCONFED 0xFFFFFF03 -#define COMMUNITY_LOCAL_AS 0xFFFFFF03 -#define COMMUNITY_GSHUT 0xFFFF0000 +#define COMMUNITY_INTERNET 0x0 +#define COMMUNITY_GSHUT 0xFFFF0000 +#define COMMUNITY_ACCEPT_OWN 0xFFFF0001 +#define COMMUNITY_ROUTE_FILTER_TRANSLATED_v4 0xFFFF0002 +#define COMMUNITY_ROUTE_FILTER_v4 0xFFFF0003 +#define COMMUNITY_ROUTE_FILTER_TRANSLATED_v6 0xFFFF0004 +#define COMMUNITY_ROUTE_FILTER_v6 0xFFFF0005 +#define COMMUNITY_LLGR_STALE 0xFFFF0006 +#define COMMUNITY_NO_LLGR 0xFFFF0007 +#define COMMUNITY_ACCEPT_OWN_NEXTHOP 0xFFFF0008 +#define COMMUNITY_BLACKHOLE 0xFFFF029A +#define COMMUNITY_NO_EXPORT 0xFFFFFF01 +#define COMMUNITY_NO_ADVERTISE 0xFFFFFF02 +#define COMMUNITY_NO_EXPORT_SUBCONFED 0xFFFFFF03 +#define COMMUNITY_LOCAL_AS 0xFFFFFF03 +#define COMMUNITY_NO_PEER 0xFFFFFF04 /* Macros of community attribute. */ #define com_length(X) ((X)->size * 4) @@ -58,25 +69,39 @@ struct community { /* Prototypes of communities attribute functions. */ extern void community_init(void); extern void community_finish(void); -extern void community_free(struct community *); +extern void community_free(struct community **comm); extern struct community *community_uniq_sort(struct community *); -extern struct community *community_parse(u_int32_t *, u_short); +extern struct community *community_parse(uint32_t *, unsigned short); extern struct community *community_intern(struct community *); extern void community_unintern(struct community **); extern char *community_str(struct community *, bool make_json); -extern unsigned int community_hash_make(struct community *); +extern unsigned int community_hash_make(const struct community *); extern struct community *community_str2com(const char *); extern int community_match(const struct community *, const struct community *); -extern int community_cmp(const struct community *, const struct community *); +extern bool community_cmp(const struct community *c1, + const struct community *c2); extern struct community *community_merge(struct community *, struct community *); extern struct community *community_delete(struct community *, struct community *); extern struct community *community_dup(struct community *); -extern int community_include(struct community *, u_int32_t); -extern void community_del_val(struct community *, u_int32_t *); +extern int community_include(struct community *, uint32_t); +extern void community_del_val(struct community *, uint32_t *); extern unsigned long community_count(void); extern struct hash *community_hash(void); -extern u_int32_t community_val_get(struct community *com, int i); +extern uint32_t community_val_get(struct community *com, int i); +extern void bgp_compute_aggregate_community(struct bgp_aggregate *aggregate, + struct community *community); + +extern void bgp_compute_aggregate_community_val( + struct bgp_aggregate *aggregate); +extern void bgp_compute_aggregate_community_hash( + struct bgp_aggregate *aggregate, + struct community *community); +extern void bgp_remove_community_from_aggregate(struct bgp_aggregate *aggregate, + struct community *community); +extern void bgp_remove_comm_from_aggregate_hash(struct bgp_aggregate *aggregate, + struct community *community); +extern void bgp_aggr_community_remove(void *arg); #endif /* _QUAGGA_BGP_COMMUNITY_H */