#include "lib/json.h"
/* Communities attribute. */
-struct community
-{
- /* Reference count of communities value. */
- unsigned long refcnt;
+struct community {
+ /* Reference count of communities value. */
+ unsigned long refcnt;
- /* Communities value size. */
- int size;
+ /* Communities value size. */
+ int size;
- /* Communities value. */
- u_int32_t *val;
+ /* Communities value. */
+ uint32_t *val;
- /* Communities as a json object */
- json_object *json;
+ /* Communities as a json object */
+ json_object *json;
- /* String of community attribute. This sring is used by vty output
- and expanded community-list for regular expression match. */
- char *str;
+ /* String of community attribute. This sring is used by vty output
+ and expanded community-list for regular expression match. */
+ char *str;
};
/* 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_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)
#define com_nthval(X,n) ((X)->val + (n))
/* Prototypes of communities attribute functions. */
-extern void community_init (void);
-extern void community_finish (void);
-extern void community_free (struct community *);
-extern struct community *community_uniq_sort (struct community *);
-extern struct community *community_parse (u_int32_t *, u_short);
-extern struct community *community_intern (struct community *);
-extern void community_unintern (struct community **);
-extern char *community_str (struct community *);
-extern unsigned int community_hash_make (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 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 unsigned long community_count (void);
-extern struct hash *community_hash (void);
-extern u_int32_t community_val_get (struct community *com, int i);
+extern void community_init(void);
+extern void community_finish(void);
+extern void community_free(struct community **comm);
+extern struct community *community_uniq_sort(struct community *);
+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 struct community *community_str2com(const char *);
+extern int community_match(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 *, uint32_t);
+extern void community_del_val(struct community *, uint32_t *);
+extern unsigned long community_count(void);
+extern struct hash *community_hash(void);
+extern uint32_t community_val_get(struct community *com, int i);
#endif /* _QUAGGA_BGP_COMMUNITY_H */