TRIP Routing Daemon
TRIP (RFC 3219) Location Server Implementation
Loading...
Searching...
No Matches
protocol.h
Go to the documentation of this file.
1/*
2
3 trip: Modern TRIP LS implementation
4 Copyright (C) 2025 arf20 (Ángel Ruiz Fernandez)
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <https://www.gnu.org/licenses/>.
18
19*/
20
24
25#ifndef _PROTOCOL_H
26#define _PROTOCOL_H
27
28#include <stdint.h>
29#include <stddef.h>
30
31
32#define MAX_MSG_SIZE 4096
33
34
37 MSG_TYPE_OPEN = 1,
38 MSG_TYPE_UPDATE,
39 MSG_TYPE_NOTIFICATION,
40 MSG_TYPE_KEEPALIVE
41};
42
44extern const char *msg_type_strs[];
45
47typedef struct __attribute__((packed)) {
48 uint16_t msg_len;
49 uint8_t msg_type;
50 uint8_t msg_val[];
51} msg_t;
52
53
56 OPEN_OPT_TYPE_CAPABILITY_INFO = 1,
57};
58
60extern const char *open_opt_type_strs[];
61
63typedef struct __attribute__((packed)) {
64 uint16_t opt_type;
65 uint16_t opt_len;
66 uint8_t opt_val[];
67} msg_open_opt_t;
68
70#define PROTOCOL_VERSION 1
71
73typedef struct __attribute__((packed)) {
74 uint8_t open_ver;
75 uint8_t open_reserved;
76 uint16_t open_hold;
77 uint32_t open_itad;
78 uint32_t open_id;
79 uint16_t open_opts_len;
80 msg_open_opt_t open_opts[];
81} msg_open_t;
82
83
86 CAPINFO_CODE_ROUTETYPE = 1,
87 CAPINFO_CODE_TRANSMODE
88};
89
91extern const char *capinfo_code_strs[];
92
94typedef struct __attribute__((packed)) {
95 uint16_t capinfo_code;
96 uint16_t capinfo_len;
97 uint8_t capinfo_val[];
98} capinfo_t;
99
100
102typedef struct __attribute__((packed)) {
103 uint16_t routetype_af;
104 uint16_t routetype_app_proto;
105} capinfo_routetype_t;
106
107
110 CAPINFO_TRANS_SEND_RECV = 1,
111 CAPINFO_TRANS_SEND,
112 CAPINFO_TRANS_RECV
113};
114
116extern const char *capinfo_transmode_strs[];
117
121#define CAPINFO_TRANS_NULL (uint32_t)-1
122
124typedef uint32_t capinfo_transmode_t;
125
126
141#define IS_ATTR_FLAG_WELL_KNOWN(x) ((x >> 7) & 1)
142#define IS_ATTR_FLAG_TRANSITIVE(x) ((x >> 6) & 1)
143#define IS_ATTR_FLAG_DEPENDENT(x) ((x >> 5) & 1)
144#define IS_ATTR_FLAG_PARTIAL(x) ((x >> 4) & 1)
145#define IS_ATTR_FLAG_LSENCAP(x) ((x >> 3) & 1)
146
147#define ATTR_FLAG_WELL_KNOWN 0b10000000
148#define ATTR_FLAG_TRANSITIVE 0b01000000
149#define ATTR_FLAG_DEPENDENT 0b00100000
150#define ATTR_FLAG_PARTIAL 0b00010000
151#define ATTR_FLAG_LSENCAP 0b00001000
152
153const char *flags_str(uint8_t flags);
154
159 ATTR_TYPE_REACHABLEROUTES,
160 ATTR_TYPE_NEXTHOPSERVER,
161 ATTR_TYPE_ADVERTISEMENTPATH,
162 ATTR_TYPE_ROUTEDPATH,
163 ATTR_TYPE_ATOMICAGGREGATE,
164 ATTR_TYPE_LOCALPREFERENCE,
165 ATTR_TYPE_MULTIEXITDISC,
166 ATTR_TYPE_COMMUNITIES,
167 ATTR_TYPE_ITADTOPOLOGY,
168 ATTR_TYPE_CONVERTEDROUTE,
173 ATTR_TYPE_AVAILABLECIRCUITS,
174 ATTR_TYPE_CALLSUCCESS,
175 ATTR_TYPE_E164PREFIX,
176 ATTR_TYPE_PENTADECPREFIX,
177 ATTR_TYPE_DECIMALPREFIX,
178 ATTR_TYPE_TRUNKGROUP,
179 ATTR_TYPE_CARRIER
180};
181
183extern const char *attr_strs[];
184
186typedef struct __attribute__((packed)) {
187 uint8_t attr_flags;
188 uint8_t attr_type;
189 uint16_t attr_len;
190 uint8_t attr_val[];
191} msg_update_attr_t;
192
194typedef struct __attribute__((packed)) {
195 uint8_t attr_flags;
196 uint8_t attr_type;
197 uint16_t attr_len;
198 uint32_t attr_id;
199 uint32_t attr_seq;
200 uint8_t attr_val[];
201} msg_update_attr_lsencap_t;
202
203#define INITIAL_SEQUENCE_NUMBER 0x80000001 /* -N + 1 */
204#define MAX_SEQUENCE_NUMBER 0x7fffffff /* N - 1*/
205
206
207/* attributes */
208
209
211enum af {
212 /* RFC3219 */
213 AF_DECIMAL = 1,
214 AF_PENTADECIMAL,
215 AF_E164,
216 /* RFC5140 */
217 AF_TRUNKGROUP,
218 AF_CARRIER
219};
220
222extern const char *af_strs[];
223
233
235const char *app_proto_str(int app_proto);
236
238typedef struct __attribute__((packed)) {
239 uint16_t route_af;
240 uint16_t route_app_proto;
241 uint16_t route_len;
242 char route_addr[];
243} route_t;
244
250typedef route_t attr_withdrawnroutes_t[];
251
252
258typedef route_t attr_reachableroutes_t[];
259
260
268
269typedef struct __attribute__((packed)) {
270 uint32_t nexthopserver_itad;
271 uint16_t nexthopserver_serverlen;
272 char nexthopserver_server[];
273} attr_nexthopserver_t;
274
275
278 ITADPATH_TYPE_AP_SET = 1,
279 ITADPATH_TYPE_AP_SEQUENCE
280};
281
283typedef struct __attribute__((packed)) {
284 uint8_t itadpath_type;
285 uint8_t itadpath_len;
286 uint32_t itadpath_segs[];
287} itadpath_t;
288
295typedef itadpath_t attr_advertisementpath_t;
296
297
304typedef itadpath_t attr_routedpath_t;
305
306
313
314
316typedef uint32_t attr_localpref_t;
317
318
323typedef uint32_t attr_multiexitdisc_t;
324
325
327typedef struct __attribute__((packed)) {
328 uint32_t community_itad;
329 uint32_t community_id;
330} community_t;
331
333#define COMMUNITY_NO_EXPORT ((community_t){ 0x00000000, 0xffffff01 })
334
340typedef community_t attr_communities_t[];
341
342
348typedef uint32_t attr_itadtopology_t[];
349
350
357
358
359/* future RFC5115 and RFC5140 attributes go here */
360
361
366typedef void msg_keepalive_t;
367
368
371 NOTIF_CODE_ERROR_MSG = 1,
372 NOTIF_CODE_ERROR_OPEN,
373 NOTIF_CODE_ERROR_UPDATE,
374 NOTIF_CODE_ERROR_EXPIRED,
375 NOTIF_CODE_ERROR_STATE,
376 NOTIF_CODE_CEASE
377};
378
380extern const char *notif_code_strs[];
381
384 NOTIF_SUBCODE_MSG_BAD_LEN = 1,
385 NOTIF_SUBCODE_MSG_BAD_TYPE
386};
387
389extern const char *notif_subcode_msg_strs[];
390
393 NOTIF_SUBCODE_OPEN_UNSUP_VERSION = 1,
394 NOTIF_SUBCODE_OPEN_BAD_ITAD,
395 NOTIF_SUBCODE_OPEN_BAD_ID,
396 NOTIF_SUBCODE_OPEN_UNSUP_OPT,
397 NOTIF_SUBCODE_OPEN_BAD_HOLD,
398 NOTIF_SUBCODE_OPEN_UNSUP_CAP,
399 NOTIF_SUBCODE_OPEN_CAP_MISMATCH
400};
401
403extern const char *notif_subcode_open_strs[];
404
407 NOTIF_SUBCODE_UPDATE_MALFORM_ATTR = 1,
408 NOTIF_SUBCODE_UPDATE_UNK_WELLKNOWN_ATTR,
409 NOTIF_SUBCODE_UPDATE_MISS_WELLKNOWN_ATTR,
410 NOTIF_SUBCODE_UPDATE_BAD_ATTR_FLAG,
411 NOTIF_SUBCODE_UPDATE_BAD_ATTR_LEN,
412 NOTIF_SUBCODE_UPDATE_INVAL_ATTR
413};
414
416extern const char *notif_subcode_update_strs[];
417
419extern const char **notif_code_subcodes_strs[];
420
422typedef struct __attribute__((packed)) {
423 uint8_t notif_error_code;
424 uint8_t notif_error_subcode;
425 uint8_t notif_data[];
426} msg_notif_t;
427
428
429/* serialization/deserialization functions */
430
455
457extern const char *runtime_error_strs[];
458
459
460/* default timers */
461
462#define TIMER_CONNECT_RETRY 120
463#define TIMER_HOLD_TIME 90
464#define TIMER_KEEPALIVE 30
465#define TIMER_MAX_PURGE_TIME 10
466#define TIMER_DISABLE_TIME 180
467#define TIMER_MIN_ITAD_ORIG_INT 30
468#define TIMER_MIN_ROUTE_ADVERT_INT 30
469
470
471/* default attribute values (when not present) */
472
473#define DEF_LOCAL_PREF 100
474#define DEF_METRIC 100
475
476
477/* objects */
478
480extern const capinfo_routetype_t supported_routetypes[];
482extern const size_t supported_routetypes_size;
483
484
485/* macros */
486
488#define PROTO_TCP_PORT 6069
489
491#define PROTO_TRY(o, res, a) \
492 res = o; \
493 if (res < 0) { \
494 ERROR("protocol error: %s", runtime_error_strs[-res]); \
495 a; \
496 }
497
498
499/* message serializers
500 * sizes are in element count, not bytes
501 */
502
504runtime_error_t new_msg_open(void *buff, size_t len, uint16_t hold,
505 uint32_t itad, uint32_t id, const capinfo_routetype_t *capinfo_routetypes,
506 size_t routetypes_size, capinfo_transmode_t capinfo_transmode);
507
509runtime_error_t new_msg_update(void *buff, size_t len,
510 const msg_update_attr_t **attrs, size_t attrs_size);
511
513runtime_error_t new_msg_keepalive(void *buff, size_t len);
514
516runtime_error_t new_msg_notif(void *buff, size_t len, uint8_t error_code,
517 uint8_t error_subcode, size_t datalen, const void *data);
518
519
520/* UPDATE attribute serializers */
521
523runtime_error_t new_route(void *buff, size_t len, uint16_t af,
524 uint16_t app_proto, const char *addr);
525
528runtime_error_t new_attr_withdrawnroutes(void *buff, size_t len, int lsencap,
529 uint32_t id, uint32_t seq, const void *routes, size_t routes_size);
530
533runtime_error_t new_attr_reachableroutes(void *buff, size_t len, int lsencap,
534 uint32_t id, uint32_t seq, const void *routes, size_t routes_size);
535
537runtime_error_t new_attr_nexthopserver(void *buff, size_t len,
538 uint32_t next_itad, const char *server);
539
541runtime_error_t new_attr_advertisementpath(void *buff, size_t len, uint8_t type,
542 const uint32_t *segs, uint16_t segs_size);
543
545runtime_error_t new_attr_routedpath(void *buff, size_t len, uint8_t type,
546 const uint32_t *segs, uint16_t segs_size);
547
549runtime_error_t new_attr_atomicaggregate(void *buff, size_t len);
550
552runtime_error_t new_attr_localpref(void *buff, size_t len, uint32_t localpref);
553
555runtime_error_t new_attr_multiexitdisc(void *buff, size_t len, uint32_t metric);
556
558runtime_error_t new_attr_communities(void *buff, size_t len,
559 const community_t *communities, size_t communities_size);
560
562runtime_error_t new_attr_itadtopology(void *buff, size_t len, uint32_t id,
563 uint32_t seq, const uint32_t *itads, size_t itads_size);
564
566runtime_error_t new_attr_convertedroute(void *buff, size_t len);
567
568
569/* deserializers */
570
571/* messages */
572
574runtime_error_t parse_msg(void *buff, size_t len, msg_t **msg_out);
575
576
577/* message OPEN
578 */
579
581runtime_error_t parse_msg_open(void *buff, size_t len,
582 msg_open_t **open_out);
583
585runtime_error_t parse_msg_open_opt(void *buff, size_t len,
586 msg_open_opt_t **opt_out);
587
589runtime_error_t parse_capinfo(void *buff, size_t len,
590 capinfo_t **capinfo_out);
591
593runtime_error_t parse_capinfo_routetype(void *buff, size_t len,
594 capinfo_routetype_t **routetype_out);
595
597runtime_error_t parse_capinfo_transmode(void *buff, size_t len,
598 capinfo_transmode_t **transmode_out);
599
600
601/* message UPDATE
602 * list of attributes
603 */
604
606runtime_error_t parse_msg_update_attr(void *buff, size_t len,
607 msg_update_attr_t **attr_out);
608
611 msg_update_attr_lsencap_t **attr_out);
612
613
614/* attributes */
615
617runtime_error_t parse_attr_nexthopserver(void *buff, size_t len,
618 attr_nexthopserver_t **nexthop_out);
619
621runtime_error_t parse_route(void *buff, size_t len,
622 route_t **route_out);
623
625runtime_error_t parse_itadpath(void *buff, size_t len,
626 itadpath_t **itadpath_out);
627
629runtime_error_t parse_attr_localpref(void *buff, size_t len,
630 attr_localpref_t **localpref_out);
631
633runtime_error_t parse_attr_multiexitdisc(void *buff, size_t len,
634 attr_multiexitdisc_t **multiexitdisc_out);
635
637runtime_error_t parse_community(void *buff, size_t len,
638 community_t **community_out);
639
641runtime_error_t parse_itad(void *buff, size_t len,
642 uint32_t **itad_out);
643
644
645
646/* message KEEPALIVE
647 * (empty, no parser)
648 */
649
650
651/* message NOTIFICATION
652 */
653
655runtime_error_t parse_msg_notif(void *buff, size_t len,
656 msg_notif_t **notif_out);
657
659const char *notif_code_subcode_str(int code, int subcode);
660
661
662#endif /* _PROTOCOL_H */
663
struct __attribute__((packed))
Message OPEN optional paramter.
Definition dns.c:37
const char * notif_code_strs[]
NOTIFICATION error code strings.
Definition protocol.c:127
const char * runtime_error_strs[]
Serialization/deserialization runtime error strings.
Definition protocol.c:193
const char * notif_subcode_update_strs[]
NOTIFICATION error subcode for UPDATE strings.
Definition protocol.c:154
const size_t supported_routetypes_size
Supported routetypes constant size.
Definition protocol.c:232
const char * notif_subcode_open_strs[]
NOTIFICATION error subcode for OPEN strings.
Definition protocol.c:143
const char ** notif_code_subcodes_strs[]
subcode strings per code class
Definition protocol.c:164
const char * attr_strs[]
Attribute strings.
Definition protocol.c:91
const char * af_strs[]
Address family strings.
Definition protocol.c:117
const capinfo_routetype_t supported_routetypes[]
Supported routetypes constant.
Definition protocol.c:218
const char * notif_subcode_msg_strs[]
NOTIFICATION error subcode for message strings.
Definition protocol.c:137
const char * capinfo_transmode_strs[]
Capability information transmission mode types strings.
Definition protocol.c:59
const char * open_opt_type_strs[]
Message type strings.
Definition protocol.c:46
const char * msg_type_strs[]
Message type strings.
Definition protocol.c:38
const char * capinfo_code_strs[]
Capability information option type strings.
Definition protocol.c:52
uint32_t attr_itadtopology_t[]
Attribute ITAD Topology.
Definition protocol.h:348
runtime_error_t new_attr_withdrawnroutes(void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const void *routes, size_t routes_size)
Serialize WithdrawnRoutes attribute routes_size is size of routes in bytes.
Definition protocol.c:429
af
Address families.
Definition protocol.h:211
app_proto
Application protocols.
Definition protocol.h:225
@ APP_PROTO_H323_225_0_RAS
Definition protocol.h:229
@ APP_PROTO_H323_225_0_ANNEXG
Definition protocol.h:230
@ APP_PROTO_H323_225_0_Q931
Definition protocol.h:228
@ APP_PROTO_SIP
Definition protocol.h:227
@ APP_PROTO_IAX2
Definition protocol.h:231
runtime_error_t parse_route(void *buff, size_t len, route_t **route_out)
Deserialize route.
Definition protocol.c:985
capinfo_transmode
Capability information transmission mode types.
Definition protocol.h:109
runtime_error_t new_attr_localpref(void *buff, size_t len, uint32_t localpref)
Serialize LocalPref attribute.
Definition protocol.c:617
runtime_error_t parse_attr_nexthopserver(void *buff, size_t len, attr_nexthopserver_t **nexthop_out)
Deserialize NextHopServer attribute.
Definition protocol.c:1008
runtime_error_t new_msg_notif(void *buff, size_t len, uint8_t error_code, uint8_t error_subcode, size_t datalen, const void *data)
Serialize NOTIFICATION message.
Definition protocol.c:749
itadpath_type
ITAD path types.
Definition protocol.h:277
runtime_error_t parse_msg_update_attr_lsencap(void *buff, size_t len, msg_update_attr_lsencap_t **attr_out)
Deserialize UPDATE link-state encapsulated attribute.
Definition protocol.c:959
enum runtime_errors_e runtime_error_t
Serialization/deserialization runtime errors.
runtime_error_t new_attr_reachableroutes(void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const void *routes, size_t routes_size)
Serialize ReachableRoutes attribute routes_size is size of routes in bytes.
Definition protocol.c:469
notif_code
NOTIFICATION error code.
Definition protocol.h:370
runtime_error_t new_attr_nexthopserver(void *buff, size_t len, uint32_t next_itad, const char *server)
Serialize NextHopServer attribute.
Definition protocol.c:508
runtime_error_t new_attr_multiexitdisc(void *buff, size_t len, uint32_t metric)
Serialize MultiExitDisc attribute.
Definition protocol.c:635
void attr_convertedroute_t
Attribute ConvertedRoute.
Definition protocol.h:356
uint32_t capinfo_transmode_t
Capability information transmission mode.
Definition protocol.h:124
notif_subcode_update
NOTIFICATION error subcode for UPDATE.
Definition protocol.h:406
msg_type
Message types.
Definition protocol.h:36
runtime_error_t parse_msg_update_attr(void *buff, size_t len, msg_update_attr_t **attr_out)
Deserialize UPDATE attribute.
Definition protocol.c:928
void msg_keepalive_t
Message KEEPALIVE.
Definition protocol.h:366
notif_subcode_open
NOTIFICATION error subcode for OPEN.
Definition protocol.h:392
runtime_error_t parse_itad(void *buff, size_t len, uint32_t **itad_out)
Deserialize ITAD.
Definition protocol.c:1114
uint32_t attr_multiexitdisc_t
Attribute MultiExitDiscriminator.
Definition protocol.h:323
itadpath_t attr_routedpath_t
Attribute RoutedPath.
Definition protocol.h:304
runtime_error_t parse_community(void *buff, size_t len, community_t **community_out)
Deserialize Community.
Definition protocol.c:1089
runtime_errors_e
Serialization/deserialization runtime errors.
Definition protocol.h:432
@ ERROR_ITAD
Definition protocol.h:437
@ ERROR_NOTIF_ERROR_SUBCODE
Definition protocol.h:439
@ ERROR_OPT
Definition protocol.h:444
@ ERROR_CAPINFO_CODE
Definition protocol.h:445
@ ERROR_INCOMPLETE
Definition protocol.h:441
@ ERROR_BUFF
Definition protocol.h:434
@ ERROR_NOTIF_ERROR_CODE
Definition protocol.h:438
@ ERROR_APP_PROTO
Definition protocol.h:447
@ ERROR_MSGTYPE
Definition protocol.h:442
@ ERROR_ATTR_TYPE
Definition protocol.h:449
@ ERROR_HOLD
Definition protocol.h:436
@ ERROR_COMMUNITY_ITAD
Definition protocol.h:453
@ ERROR_AF
Definition protocol.h:446
@ ERROR_TRANS
Definition protocol.h:448
@ ERROR_BUFFLEN
Definition protocol.h:435
@ ERROR_ITADPATH_TYPE
Definition protocol.h:452
@ ERROR_VERSION
Definition protocol.h:443
@ ERROR_ATTR_FLAG_LSENCAP
Definition protocol.h:451
@ ERROR_ATTR_FLAG_WELL_KNOWN
Definition protocol.h:450
notif_subcode_msg
NOTIFICATION error subcode for message.
Definition protocol.h:383
runtime_error_t new_attr_communities(void *buff, size_t len, const community_t *communities, size_t communities_size)
Serialize Communities attribute.
Definition protocol.c:654
open_opt_type
Message OPEN optional parameter types.
Definition protocol.h:55
runtime_error_t parse_msg_open(void *buff, size_t len, msg_open_t **open_out)
Deserialize message OPEN.
Definition protocol.c:809
uint32_t attr_localpref_t
Attribute LocalPreference.
Definition protocol.h:316
runtime_error_t parse_capinfo(void *buff, size_t len, capinfo_t **capinfo_out)
Deserialize option capability information.
Definition protocol.c:852
runtime_error_t parse_msg(void *buff, size_t len, msg_t **msg_out)
Deserialize message.
Definition protocol.c:788
runtime_error_t parse_capinfo_transmode(void *buff, size_t len, capinfo_transmode_t **transmode_out)
Deserialize option transmission mode.
Definition protocol.c:901
const char * app_proto_str(int app_proto)
Application protocol to string.
Definition protocol.c:177
runtime_error_t new_route(void *buff, size_t len, uint16_t af, uint16_t app_proto, const char *addr)
Serialize route.
Definition protocol.c:407
const char * notif_code_subcode_str(int code, int subcode)
String NOTIFICATION code, subcode.
Definition protocol.c:1166
runtime_error_t new_msg_update(void *buff, size_t len, const msg_update_attr_t **attrs, size_t attrs_size)
Serialize UPDATE message.
Definition protocol.c:373
attr_type
UPDATE attribute types.
Definition protocol.h:156
@ ATTR_TYPE_WITHDRAWNROUTES
Definition protocol.h:158
@ ATTR_TYPE_RESOURCEPRIORITY
Definition protocol.h:170
@ ATTR_TYPE_TOTALCIRCUITCAPACITY
Definition protocol.h:172
runtime_error_t new_attr_advertisementpath(void *buff, size_t len, uint8_t type, const uint32_t *segs, uint16_t segs_size)
Serialize AdvertisementPath attribute.
Definition protocol.c:541
runtime_error_t new_msg_keepalive(void *buff, size_t len)
Serialize KEEPALIVE message.
Definition protocol.c:730
runtime_error_t parse_attr_multiexitdisc(void *buff, size_t len, attr_multiexitdisc_t **multiexitdisc_out)
Deserialize MultiExitDisc attribute.
Definition protocol.c:1071
runtime_error_t parse_itadpath(void *buff, size_t len, itadpath_t **itadpath_out)
Deserialize ITAD path.
Definition protocol.c:1029
runtime_error_t new_msg_open(void *buff, size_t len, uint16_t hold, uint32_t itad, uint32_t id, const capinfo_routetype_t *capinfo_routetypes, size_t routetypes_size, capinfo_transmode_t capinfo_transmode)
Serialize OPEN message.
Definition protocol.c:286
itadpath_t attr_advertisementpath_t
Attribute AdvertisementPath.
Definition protocol.h:295
runtime_error_t parse_msg_notif(void *buff, size_t len, msg_notif_t **notif_out)
Deserialize NOTIFICATION message.
Definition protocol.c:1147
runtime_error_t parse_attr_localpref(void *buff, size_t len, attr_localpref_t **localpref_out)
Deserialize LocalPreference attribute.
Definition protocol.c:1055
route_t attr_reachableroutes_t[]
Attribute ReachableRoutes.
Definition protocol.h:258
runtime_error_t parse_msg_open_opt(void *buff, size_t len, msg_open_opt_t **opt_out)
Deserialize message OPEN optional parameter.
Definition protocol.c:834
community_t attr_communities_t[]
Attribute Communities.
Definition protocol.h:340
runtime_error_t new_attr_routedpath(void *buff, size_t len, uint8_t type, const uint32_t *segs, uint16_t segs_size)
Serialize RoutedPath attribute.
Definition protocol.c:571
capinfo_code
Capability information option types.
Definition protocol.h:85
runtime_error_t new_attr_atomicaggregate(void *buff, size_t len)
Serialize AtomicAggregate attribute.
Definition protocol.c:600
route_t attr_withdrawnroutes_t[]
Attribute WithdrawnRoutes.
Definition protocol.h:250
runtime_error_t new_attr_itadtopology(void *buff, size_t len, uint32_t id, uint32_t seq, const uint32_t *itads, size_t itads_size)
Serialize ITAD Topology attribute.
Definition protocol.c:683
runtime_error_t new_attr_convertedroute(void *buff, size_t len)
Serialize ConvertedRoute attribute.
Definition protocol.c:711
runtime_error_t parse_capinfo_routetype(void *buff, size_t len, capinfo_routetype_t **routetype_out)
Deserialize option route type.
Definition protocol.c:873
void attr_atomicaggregate_t
Attribute AtomicAggregate.
Definition protocol.h:312