]>
Commit | Line | Data |
---|---|---|
c0668f36 MM |
1 | /* |
2 | * BIRD Internet Routing Daemon -- Attribute Operations | |
3 | * | |
4 | * (c) 2000 Martin Mares <mj@ucw.cz> | |
5 | * | |
6 | * Can be freely distributed and used under the terms of the GNU GPL. | |
7 | */ | |
8 | ||
9 | #ifndef _BIRD_ATTRS_H_ | |
10 | #define _BIRD_ATTRS_H_ | |
11 | ||
46eb80d5 OZ |
12 | #include <stdint.h> |
13 | ||
c0668f36 MM |
14 | /* a-path.c */ |
15 | ||
c6add07f MM |
16 | #define AS_PATH_SET 1 /* Types of path segments */ |
17 | #define AS_PATH_SEQUENCE 2 | |
48d79d52 OZ |
18 | #define AS_PATH_CONFED_SEQUENCE 3 |
19 | #define AS_PATH_CONFED_SET 4 | |
c6add07f | 20 | |
11cb6202 OZ |
21 | #define AS_PATH_MAXLEN 10000 |
22 | ||
23 | #define AS_TRANS 23456 | |
24 | /* AS_TRANS is used when we need to store 32bit ASN larger than 0xFFFF | |
25 | * to 16bit slot (like in 16bit AS_PATH). See RFC 4893 for details | |
26 | */ | |
27 | ||
28 | struct adata *as_path_prepend(struct linpool *pool, struct adata *olda, u32 as); | |
29 | int as_path_convert_to_old(struct adata *path, byte *dst, int *new_used); | |
30 | int as_path_convert_to_new(struct adata *path, byte *dst, int req_as); | |
684c6f5a PM |
31 | void as_path_format(struct adata *path, byte *buf, unsigned int size); |
32 | int as_path_getlen(struct adata *path); | |
949bd34e | 33 | int as_path_getlen_int(struct adata *path, int bs); |
11cb6202 | 34 | int as_path_get_first(struct adata *path, u32 *orig_as); |
b6bf284a | 35 | int as_path_get_last(struct adata *path, u32 *last_as); |
11cb6202 OZ |
36 | int as_path_is_member(struct adata *path, u32 as); |
37 | ||
c8a6b9a3 OZ |
38 | #define PM_ASN 0 |
39 | #define PM_QUESTION 1 | |
40 | #define PM_ASTERISK 2 | |
92a72a4c | 41 | #define PM_ASN_EXPR 3 |
684c6f5a | 42 | |
2a40efa5 PM |
43 | struct f_path_mask { |
44 | struct f_path_mask *next; | |
c8a6b9a3 | 45 | int kind; |
92a72a4c | 46 | uintptr_t val; |
2a40efa5 | 47 | }; |
11cb6202 | 48 | |
2a40efa5 PM |
49 | int as_path_match(struct adata *path, struct f_path_mask *mask); |
50 | ||
c6add07f MM |
51 | /* a-set.c */ |
52 | ||
aebe06b4 | 53 | void int_set_format(struct adata *set, int way, byte *buf, unsigned int size); |
9c400ec9 PM |
54 | struct adata *int_set_add(struct linpool *pool, struct adata *list, u32 val); |
55 | int int_set_contains(struct adata *list, u32 val); | |
56 | struct adata *int_set_del(struct linpool *pool, struct adata *list, u32 val); | |
57 | ||
4847a894 OZ |
58 | static inline int int_set_get_size(struct adata *list) |
59 | { return list->length / 4; } | |
60 | ||
c0668f36 | 61 | #endif |