]>
Commit | Line | Data |
---|---|---|
57d187bc | 1 | /* BGP Large Communities Attribute. |
2acb4ac2 DL |
2 | * |
3 | * Copyright (C) 2016 Keyur Patel <keyur@arrcus.com> | |
4 | * | |
5 | * This file is part of FreeRangeRouting (FRR). | |
6 | * | |
7 | * FRR is free software; you can redistribute it and/or modify it under the | |
8 | * terms of the GNU General Public License as published by the Free Software | |
9 | * Foundation; either version 2, or (at your option) any later version. | |
10 | * | |
11 | * FRR is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
13 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
14 | * details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
896014f4 DL |
17 | * with this program; see the file COPYING; if not, write to the Free Software |
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
2acb4ac2 | 19 | */ |
57d187bc JS |
20 | |
21 | #ifndef _QUAGGA_BGP_LCOMMUNITY_H | |
22 | #define _QUAGGA_BGP_LCOMMUNITY_H | |
23 | ||
8d9b8ed9 | 24 | #include "lib/json.h" |
4c99b6c2 | 25 | #include "bgpd/bgp_route.h" |
57d187bc JS |
26 | |
27 | /* Large Communities value is twelve octets long. */ | |
28 | #define LCOMMUNITY_SIZE 12 | |
29 | ||
30 | /* Large Communities attribute. */ | |
d62a17ae | 31 | struct lcommunity { |
32 | /* Reference counter. */ | |
33 | unsigned long refcnt; | |
57d187bc | 34 | |
d62a17ae | 35 | /* Size of Extended Communities attribute. */ |
36 | int size; | |
57d187bc | 37 | |
f1e1e1c3 | 38 | /* Large Communities value. */ |
d7c0a89a | 39 | uint8_t *val; |
57d187bc | 40 | |
8d9b8ed9 PM |
41 | /* Large Communities as a json object */ |
42 | json_object *json; | |
43 | ||
d62a17ae | 44 | /* Human readable format string. */ |
45 | char *str; | |
57d187bc JS |
46 | }; |
47 | ||
f1e1e1c3 | 48 | /* Large community value is 12 octets. */ |
d62a17ae | 49 | struct lcommunity_val { |
50 | char val[LCOMMUNITY_SIZE]; | |
57d187bc JS |
51 | }; |
52 | ||
53 | #define lcom_length(X) ((X)->size * LCOMMUNITY_SIZE) | |
54 | ||
d62a17ae | 55 | extern void lcommunity_init(void); |
56 | extern void lcommunity_finish(void); | |
57 | extern void lcommunity_free(struct lcommunity **); | |
d7c0a89a | 58 | extern struct lcommunity *lcommunity_parse(uint8_t *, unsigned short); |
d62a17ae | 59 | extern struct lcommunity *lcommunity_dup(struct lcommunity *); |
60 | extern struct lcommunity *lcommunity_merge(struct lcommunity *, | |
61 | struct lcommunity *); | |
62 | extern struct lcommunity *lcommunity_uniq_sort(struct lcommunity *); | |
63 | extern struct lcommunity *lcommunity_intern(struct lcommunity *); | |
74df8d6d | 64 | extern bool lcommunity_cmp(const void *arg1, const void *arg2); |
d62a17ae | 65 | extern void lcommunity_unintern(struct lcommunity **); |
d8b87afe | 66 | extern unsigned int lcommunity_hash_make(const void *); |
d62a17ae | 67 | extern struct hash *lcommunity_hash(void); |
68 | extern struct lcommunity *lcommunity_str2com(const char *); | |
d62a17ae | 69 | extern int lcommunity_match(const struct lcommunity *, |
70 | const struct lcommunity *); | |
8d9b8ed9 | 71 | extern char *lcommunity_str(struct lcommunity *, bool make_json); |
d7c0a89a QY |
72 | extern int lcommunity_include(struct lcommunity *lcom, uint8_t *ptr); |
73 | extern void lcommunity_del_val(struct lcommunity *lcom, uint8_t *ptr); | |
4c99b6c2 NT |
74 | |
75 | extern void bgp_compute_aggregate_lcommunity( | |
76 | struct bgp_aggregate *aggregate, | |
77 | struct lcommunity *lcommunity); | |
78 | extern void bgp_remove_lcommunity_from_aggregate( | |
79 | struct bgp_aggregate *aggregate, | |
80 | struct lcommunity *lcommunity); | |
81 | extern void bgp_aggr_lcommunity_remove(void *arg); | |
82 | ||
57d187bc | 83 | #endif /* _QUAGGA_BGP_LCOMMUNITY_H */ |