Updated label mapping to better support the new fec -> nh relationship
[mpls-ldp-portable.git] / ldp / ldp_struct.h
blob21d6697b56283b2c21a848887b068debff709cc9
2 /*
3 * Copyright (C) James R. Leu 2000
4 * jleu@mindspring.com
6 * This software is covered under the LGPL, for more
7 * info check out http://www.gnu.org/copyleft/lgpl.html
8 */
10 #ifndef _LDP_STRUCT_H_
11 #define _LDP_STRUCT_H_
13 #include "mpls_struct.h"
14 #include "mpls_list.h"
15 #include "mpls_refcnt.h"
17 MPLS_LIST_ROOT(ldp_outlabel_list, ldp_outlabel);
18 MPLS_LIST_ROOT(ldp_resource_list, ldp_resource);
19 MPLS_LIST_ROOT(ldp_hop_list_list, ldp_hop_list);
20 MPLS_LIST_ROOT(ldp_inlabel_list, ldp_inlabel);
21 MPLS_LIST_ROOT(ldp_session_list, ldp_session);
22 MPLS_LIST_ROOT(ldp_nexthop_list, ldp_nexthop);
23 MPLS_LIST_ROOT(ldp_entity_list, ldp_entity);
24 MPLS_LIST_ROOT(ldp_tunnel_list, ldp_tunnel);
25 MPLS_LIST_ROOT(ldp_addr_list, ldp_addr);
26 MPLS_LIST_ROOT(ldp_attr_list, ldp_attr);
27 MPLS_LIST_ROOT(ldp_peer_list, ldp_peer);
28 MPLS_LIST_ROOT(_ldp_hop_list, ldp_hop);
29 MPLS_LIST_ROOT(ldp_adj_list, ldp_adj);
30 MPLS_LIST_ROOT(ldp_fec_list, ldp_fec);
31 MPLS_LIST_ROOT(ldp_fs_list, ldp_fs);
32 MPLS_LIST_ROOT(ldp_if_list, ldp_if);
34 typedef struct ldp_attr_list ldp_attr_list;
36 typedef enum {
37 LDP_UNKNOWN = 0,
38 LDP_DIRECT,
39 LDP_INDIRECT,
40 } ldp_entity_type_enum;
42 typedef enum {
43 LDP_CONTROL_INDEPENDENT = 1,
44 LDP_CONTROL_ORDERED
45 } ldp_control_mode;
47 typedef enum {
48 LDP_RETENTION_LIBERAL = 1,
49 LDP_RETENTION_CONSERVATIVE
50 } ldp_retention_mode;
52 typedef enum {
53 LDP_REPAIR_LOCAL = 1,
54 LDP_REPAIR_GLOBAL
55 } ldp_repaire_mode;
57 typedef enum {
58 LDP_LOOP_NONE = 0,
59 LDP_LOOP_HOPCOUNT,
60 LDP_LOOP_PATHVECTOR,
61 LDP_LOOP_HOPCOUNT_PATHVECTOR,
62 LDP_LOOP_OTHER,
63 } ldp_loop_detection_mode;
65 typedef enum {
66 LDP_TRANS_ADDR_NONE = 0,
67 LDP_TRANS_ADDR_INTERFACE,
68 LDP_TRANS_ADDR_LSRID
69 } ldp_trans_addr_mode;
71 typedef enum {
72 LDP_DISTRIBUTION_UNSOLICITED = 0,
73 LDP_DISTRIBUTION_ONDEMAND = 1,
74 } ldp_distribution_mode;
76 typedef enum {
77 LDP_INFINIT = 0,
78 } ldp_count;
80 typedef enum {
81 LDP_NONE,
82 LDP_PASSIVE,
83 LDP_ACTIVE
84 } ldp_role_enum;
86 typedef enum {
87 LDP_EVENT_HELLO = 0,
88 LDP_EVENT_CONNECT,
89 LDP_EVENT_INIT,
90 LDP_EVENT_KEEP,
91 LDP_EVENT_ADDR,
92 LDP_EVENT_LABEL,
93 LDP_EVENT_NOTIF,
94 LDP_EVENT_CLOSE,
95 LDP_EVENT_HTIMER,
96 LDP_EVENT_KTIMER,
97 LDP_EVENT_TCP_LISTEN,
98 LDP_EVENT_TCP_CONNECT,
99 LDP_EVENT_UDP_DATA,
100 LDP_EVENT_TCP_DATA,
101 } ldp_event_enum;
103 typedef enum {
104 LDP_STATE_NONE = 0,
105 LDP_STATE_NON_EXIST,
106 LDP_STATE_INITIALIZED,
107 LDP_STATE_OPENSENT,
108 LDP_STATE_OPENREC,
109 LDP_STATE_OPERATIONAL
110 } ldp_state_enum;
112 typedef enum {
113 LDP_KEEPALIVE_RECV = 1,
114 LDP_KEEPALIVE_SEND
115 } ldp_keepalive_type;
117 typedef enum {
118 LDP_LSP_STATE_REQ_RECV,
119 LDP_LSP_STATE_REQ_SENT,
120 LDP_LSP_STATE_MAP_RECV,
121 LDP_LSP_STATE_MAP_SENT,
122 LDP_LSP_STATE_WITH_SENT,
123 LDP_LSP_STATE_WITH_RECV,
124 LDP_LSP_STATE_NO_LABEL_RESOURCE_SENT,
125 LDP_LSP_STATE_NO_LABEL_RESOURCE_RECV,
126 LDP_LSP_STATE_ABORT_SENT,
127 LDP_LSP_STATE_ABORT_RECV,
128 LDP_LSP_STATE_NOTIF_SENT,
129 LDP_LSP_STATE_NOTIF_RECV
130 } ldp_lsp_state;
132 typedef enum {
133 LDP_TRACE_FLAG_ADDRESS = 0x00000001,
134 LDP_TRACE_FLAG_BINDING = 0x00000002,
135 LDP_TRACE_FLAG_DEBUG = 0x00000004,
136 LDP_TRACE_FLAG_ERROR = 0x00000008,
137 LDP_TRACE_FLAG_EVENT = 0x00000010,
138 LDP_TRACE_FLAG_GENERAL = 0x00000020,
139 LDP_TRACE_FLAG_INIT = 0x00000040,
140 LDP_TRACE_FLAG_LABEL = 0x00000080,
141 LDP_TRACE_FLAG_NORMAL = 0x00000100,
142 LDP_TRACE_FLAG_NOTIF = 0x00000200,
143 LDP_TRACE_FLAG_PACKET_DUMP = 0x00000400,
144 LDP_TRACE_FLAG_PACKET = 0x00000800,
145 LDP_TRACE_FLAG_PATH = 0x00001000,
146 LDP_TRACE_FLAG_PERIODIC = 0x00002000,
147 LDP_TRACE_FLAG_POLICY = 0x00004000,
148 LDP_TRACE_FLAG_ROUTE = 0x00008000,
149 LDP_TRACE_FLAG_STATE = 0x00010000,
150 LDP_TRACE_FLAG_TASK = 0x00020000,
151 LDP_TRACE_FLAG_TIMER = 0x00040000,
152 LDP_TRACE_FLAG_ALL = 0xFFFFFFFF
153 } ldp_trace_flags;
155 typedef enum {
156 LDP_NOTIF_NONE = 0,
157 LDP_NOTIF_SUCCESS,
158 LDP_NOTIF_BAD_LDP_ID,
159 LDP_NOTIF_BAD_PROTO,
160 LDP_NOTIF_BAD_PDU_LEN,
161 LDP_NOTIF_UNKNOWN_MESG,
162 LDP_NOTIF_BAD_MESG_LEN,
163 LDP_NOTIF_UNKNOWN_TVL,
164 LDP_NOTIF_BAD_TLV_LEN,
165 LDP_NOTIF_MALFORMED_TLV,
166 LDP_NOTIF_HOLD_TIMER_EXPIRED,
167 LDP_NOTIF_SHUTDOWN,
168 LDP_NOTIF_LOOP_DETECTED,
169 LDP_NOTIF_UNKNOWN_FEC,
170 LDP_NOTIF_NO_ROUTE,
171 LDP_NOTIF_NO_LABEL_RESOURCES_AVAILABLE,
172 LDP_NOTIF_LABEL_RESOURCES_AVAILABLE,
173 LDP_NOTIF_SESSION_REJECTED_NO_HELLO,
174 LDP_NOTIF_SESSION_REJECTED_PARAMETERS_ADVERTISEMENT_MODE,
175 LDP_NOTIF_SESSION_REJECTED_PARAMETERS_MAX_PDU_LEN,
176 LDP_NOTIF_SESSION_REJECTED_PARAMETERS_LABEL_RANGE,
177 LDP_NOTIF_KEEPALIVE_TIMER_EXPIRED,
178 LDP_NOTIF_LABEL_ABORT,
179 LDP_NOTIF_MISSING_MSG_PARAMS,
180 LDP_NOTIF_UNSUPORTED_AF,
181 LDP_NOTIF_SESSION_REJECTED_BAD_KEEPALIVE_TIME,
182 LDP_NOTIF_INTERNAL_ERROR
183 } ldp_notif_status;
185 #define LDP_STATE_NUM 6
186 #define LDP_EVENT_NUM 10
187 #define LDP_FUNC_NUM 10
189 #include "ldp_defaults.h"
190 #include "mpls_handle_type.h"
191 #include "ldp_nortel.h"
193 typedef struct ldp_mesg {
194 mplsLdpHeader_t header;
195 union {
196 mplsLdpMsg_t generic;
197 mplsLdpInitMsg_t init;
198 mplsLdpNotifMsg_t notif;
199 mplsLdpHelloMsg_t hello;
200 mplsLdpKeepAlMsg_t keep;
201 mplsLdpAdrMsg_t addr;
202 mplsLdpLblMapMsg_t map;
203 mplsLdpLblReqMsg_t request;
204 mplsLdpLbl_W_R_Msg_t release;
205 mplsLdpLblAbortMsg_t abort;
206 } u;
207 } ldp_mesg;
209 typedef struct ldp_buf {
210 uint8_t *buffer;
211 uint8_t *current;
212 int current_size;
213 int size;
214 int total;
215 int want;
216 } ldp_buf;
218 typedef struct ldp_global {
219 struct ldp_outlabel_list outlabel;
220 struct ldp_resource_list resource;
221 struct ldp_hop_list_list hop_list;
222 struct ldp_inlabel_list inlabel;
223 struct ldp_nexthop_list nexthop;
224 struct ldp_session_list session;
225 struct ldp_tunnel_list tunnel;
226 struct ldp_entity_list entity;
227 struct ldp_peer_list peer;
228 struct ldp_attr_list attr;
229 struct ldp_addr_list addr;
230 struct ldp_adj_list adj;
231 struct ldp_if_list iff;
232 struct ldp_fec_list fec;
234 mpls_lock_handle global_lock;
235 mpls_instance_handle user_data;
237 mpls_tree_handle addr_tree;
238 mpls_tree_handle fec_tree;
240 mpls_socket_handle hello_socket;
241 mpls_socket_handle listen_socket;
243 mpls_timer_mgr_handle timer_handle;
244 mpls_socket_mgr_handle socket_handle;
245 mpls_fib_handle fib_handle;
246 mpls_ifmgr_handle ifmgr_handle;
248 #if MPLS_USE_LSR
249 mpls_cfg_handle lsr_handle;
250 #else
251 mpls_mpls_handle mpls_handle;
252 #endif
255 * CSN changes with every MIB set, BUT only when a entity goes through
256 * shutdown/startup cycle will it grab the new CSN and use it in hellos
258 uint32_t configuration_sequence_number;
261 * Message ID increaments with EVERY message, this means it will roll over
263 uint32_t message_identifier;
265 struct mpls_inet_addr lsr_identifier;
266 mpls_bool send_address_messages;
267 mpls_bool send_lsrid_mapping;
268 ldp_control_mode lsp_control_mode;
269 ldp_retention_mode label_retention_mode;
270 ldp_repaire_mode lsp_repair_mode;
271 mpls_bool propagate_release;
272 mpls_bool label_merge;
273 ldp_loop_detection_mode loop_detection_mode;
274 mpls_bool ttl_less_domain;
275 uint16_t local_tcp_port;
276 uint16_t local_udp_port;
277 uint16_t backoff_step;
278 int no_route_to_peer_time;
281 * some global defaults, entities will inherit these values unless
282 * instructed otherwise
284 struct mpls_inet_addr transport_address;
285 uint16_t keepalive_timer;
286 uint16_t keepalive_interval;
287 uint16_t hellotime_timer;
288 uint16_t hellotime_interval;
290 mpls_admin_state_enum admin_state;
291 } ldp_global;
293 typedef struct ldp_entity {
294 MPLS_REFCNT_FIELD;
295 MPLS_LIST_ELEM(ldp_entity) _global;
296 struct ldp_adj_list adj_root;
298 ldp_entity_type_enum entity_type;
299 union {
300 struct ldp_peer *peer;
301 struct ldp_if *iff;
302 } p;
304 ldp_state_enum state;
305 uint32_t inherit_flag;
306 uint32_t sub_index;
307 uint32_t index;
308 struct mpls_inet_addr transport_address;
309 uint8_t protocol_version;
310 uint16_t remote_tcp_port;
311 uint16_t remote_udp_port;
312 uint16_t max_pdu;
313 uint16_t keepalive_timer;
314 uint16_t keepalive_interval;
315 uint16_t hellotime_timer;
316 uint16_t hellotime_interval;
317 uint16_t session_setup_count;
318 uint16_t session_backoff_timer;
319 ldp_distribution_mode label_distribution_mode;
320 uint8_t path_vector_limit;
321 uint8_t hop_count_limit;
322 uint8_t label_request_count;
323 uint16_t label_request_timer;
324 ldp_loop_detection_mode loop_detection_mode;
325 mpls_admin_state_enum admin_state;
326 mpls_bool remote_in_ttl_less_domain;
327 mpls_bool request_retry;
329 /* mesg counters */
330 uint32_t mesg_tx;
331 uint32_t mesg_rx;
333 /* only used for cfg gets */
334 int adj_index;
335 int adj_count;
336 } ldp_entity;
338 typedef struct ldp_if {
339 MPLS_REFCNT_FIELD;
340 MPLS_LIST_ELEM(ldp_if) _global;
341 struct mpls_link_list session_root;
342 struct ldp_nexthop_list nh_root;
343 struct ldp_entity *entity;
344 mpls_timer_handle hellotime_send_timer;
345 int hellotime_send_timer_duration;
346 int label_space;
347 uint32_t index;
348 struct mpls_inet_addr local_source_address;
349 mpls_if_handle handle;
351 struct ldp_mesg *tx_message;
352 struct ldp_buf *tx_buffer;
353 struct ldp_mesg *hello;
355 /* YES this is a dest, it is what we use for sendto */
356 struct mpls_dest dest;
358 char name[MPLS_MAX_IF_NAME];
359 mpls_oper_state_enum oper_state;
360 mpls_bool used_by_ldp;
361 mpls_bool used_by_fec;
362 mpls_bool is_p2p;
364 /* only used for cfg gets */
365 uint32_t entity_index;
366 } ldp_if;
368 typedef struct ldp_peer {
369 MPLS_REFCNT_FIELD;
370 MPLS_LIST_ELEM(ldp_peer) _global;
371 struct ldp_entity *entity;
372 mpls_timer_handle no_route_to_peer_timer;
373 mpls_timer_handle hellotime_send_timer;
374 int hellotime_send_timer_duration;
375 int label_space;
376 uint32_t index;
377 struct mpls_inet_addr local_source_address;
379 struct ldp_mesg *tx_message;
380 struct ldp_buf *tx_buffer;
381 struct ldp_mesg *hello;
383 /* YES this is a dest, it is what we use for sendto */
384 struct mpls_dest dest;
385 ldp_role_enum target_role;
387 char peer_name[MPLS_MAX_IF_NAME];
388 mpls_oper_state_enum oper_state;
390 /* only used for cfg gets */
391 uint32_t entity_index;
392 } ldp_peer;
394 typedef struct ldp_session {
395 MPLS_REFCNT_FIELD;
396 MPLS_LIST_ELEM(ldp_session) _global;
397 struct ldp_outlabel_list outlabel_root;
398 struct mpls_link_list inlabel_root;
399 struct mpls_link_list addr_root;
400 struct ldp_attr_list attr_root;
401 struct ldp_adj_list adj_root;
402 mpls_timer_handle initial_distribution_timer;
403 mpls_timer_handle keepalive_recv_timer;
404 mpls_timer_handle keepalive_send_timer;
405 uint32_t index;
406 ldp_state_enum state;
407 uint32_t oper_up;
408 ldp_notif_status shutdown_notif;
409 mpls_bool shutdown_fatal;
410 mpls_socket_handle socket;
411 mpls_timer_handle backoff_timer;
412 int backoff;
414 /* operational values learned from initialization */
415 int oper_max_pdu;
416 int oper_keepalive;
417 int oper_keepalive_interval;
418 int oper_path_vector_limit;
419 ldp_distribution_mode oper_distribution_mode;
420 ldp_loop_detection_mode oper_loop_detection;
422 /* these values are learned form the remote peer */
423 ldp_distribution_mode remote_distribution_mode;
424 mpls_bool remote_loop_detection;
425 int remote_path_vector_limit;
426 int remote_keepalive;
427 int remote_max_pdu;
428 mpls_dest remote_dest;
429 uint8_t session_name[20]; /* xxx.xxx.xxx.xxx:yyy\0 */
431 mpls_bool no_label_resource_sent;
432 mpls_bool no_label_resource_recv;
433 mpls_bool on_global;
435 /* various message and buffers used for tx and rx */
436 struct ldp_mesg *keepalive;
437 struct ldp_mesg *tx_message;
438 struct ldp_buf *tx_buffer;
440 /* cached from adj's */
441 ldp_role_enum oper_role;
443 /* these are config values come from entity */
444 ldp_loop_detection_mode cfg_loop_detection_mode;
445 ldp_distribution_mode cfg_distribution_mode;
446 mpls_bool cfg_remote_in_ttl_less_domain;
447 int cfg_label_request_count;
448 int cfg_label_request_timer;
449 uint16_t cfg_peer_tcp_port;
450 int cfg_path_vector_limit;
451 int cfg_hop_count_limit;
452 int cfg_label_space;
453 int cfg_keepalive;
454 int cfg_max_pdu;
456 /* mesg counters */
457 uint32_t mesg_tx;
458 uint32_t mesg_rx;
460 /* only used by cfg gets */
461 uint32_t adj_index;
462 } ldp_session;
464 typedef struct ldp_adj {
465 MPLS_REFCNT_FIELD;
466 MPLS_LIST_ELEM(ldp_adj) _global;
467 MPLS_LIST_ELEM(ldp_adj) _session;
468 MPLS_LIST_ELEM(ldp_adj) _entity;
469 struct ldp_session *session;
470 struct ldp_entity *entity;
471 mpls_timer_handle hellotime_recv_timer;
472 mpls_oper_state_enum state;
473 ldp_role_enum role;
474 uint32_t index;
476 /* these values are learned form the remote peer */
477 struct mpls_inet_addr remote_transport_address;
478 struct mpls_inet_addr remote_source_address;
479 struct mpls_inet_addr remote_lsr_address;
480 int remote_label_space;
481 int remote_hellotime;
482 uint32_t remote_csn;
484 /* only used by cfg gets */
485 uint32_t session_index;
486 uint32_t entity_index;
487 } ldp_adj;
489 typedef struct ldp_addr {
490 MPLS_REFCNT_FIELD;
491 MPLS_LIST_ELEM(ldp_addr) _global;
492 MPLS_LIST_ELEM(ldp_addr) _addr;
493 struct mpls_link_list session_root;
494 struct ldp_nexthop_list nh_root;
495 struct mpls_inet_addr address;
496 uint32_t index;
497 } ldp_addr;
499 struct ldp_outlabel;
501 typedef struct ldp_nexthop {
502 MPLS_REFCNT_FIELD;
503 MPLS_LIST_ELEM(ldp_nexthop) _global;
504 MPLS_LIST_ELEM(ldp_nexthop) _fec;
505 MPLS_LIST_ELEM(ldp_nexthop) _addr;
506 MPLS_LIST_ELEM(ldp_nexthop) _if;
507 MPLS_LIST_ELEM(ldp_nexthop) _outlabel;
508 struct ldp_outlabel_list outlabel_root;
509 enum mpls_nexthop_enum type;
510 struct ldp_fec *fec;
511 struct ldp_addr *addr;
512 struct ldp_if *iff;
513 struct ldp_outlabel *outlabel;
514 struct mpls_nexthop info;
515 uint32_t index;
516 } ldp_nexthop;
518 typedef struct ldp_outlabel {
519 MPLS_REFCNT_FIELD;
520 MPLS_LIST_ELEM(ldp_outlabel) _global;
521 MPLS_LIST_ELEM(ldp_outlabel) _session;
522 MPLS_LIST_ELEM(ldp_outlabel) _nexthop;
523 struct ldp_inlabel_list inlabel_root;
524 struct ldp_tunnel_list tunnel_root;
525 struct ldp_nexthop_list nh_root;
526 uint32_t merge_count;
527 struct ldp_attr *attr;
528 struct ldp_session *session;
529 struct ldp_nexthop *nh;
530 struct mpls_outsegment info;
531 uint32_t index;
532 mpls_bool switching;
534 /* only used by get() */
535 uint32_t session_index;
536 uint32_t nh_index;
537 uint32_t attr_index;
538 } ldp_outlabel;
540 typedef struct ldp_inlabel {
541 MPLS_REFCNT_FIELD;
542 MPLS_LIST_ELEM(ldp_inlabel) _global;
543 MPLS_LIST_ELEM(ldp_inlabel) _outlabel;
544 struct mpls_link_list session_root;
545 struct mpls_link_list attr_root;
546 struct ldp_outlabel *outlabel;
547 uint32_t reuse_count;
548 uint32_t index;
549 struct mpls_insegment info;
551 /* only used by get() */
552 uint32_t outlabel_index;
553 } ldp_inlabel;
555 typedef struct ldp_fec {
556 MPLS_REFCNT_FIELD;
557 MPLS_LIST_ELEM(ldp_fec) _global;
558 MPLS_LIST_ELEM(ldp_fec) _inlabel;
559 MPLS_LIST_ELEM(ldp_fec) _outlabel;
560 MPLS_LIST_ELEM(ldp_fec) _tree;
561 MPLS_LIST_ELEM(ldp_fec) _addr;
562 MPLS_LIST_ELEM(ldp_fec) _fec;
563 MPLS_LIST_ELEM(ldp_fec) _if;
564 struct ldp_fs_list fs_root_us;
565 struct ldp_fs_list fs_root_ds;
566 /* ECMP */
567 struct ldp_nexthop_list nh_root;
568 struct mpls_fec info;
569 uint32_t index;
570 } ldp_fec;
572 typedef struct ldp_fs {
573 struct ldp_attr_list attr_root;
574 MPLS_LIST_ELEM(ldp_fs) _fec;
575 struct ldp_session *session;
576 } ldp_fs;
578 typedef struct ldp_attr {
579 MPLS_REFCNT_FIELD;
580 uint32_t index;
581 uint32_t msg_id;
582 struct ldp_attr_list us_attr_root;
583 struct ldp_attr *ds_attr;
584 ldp_lsp_state state;
585 mpls_bool ingress;
586 mpls_bool filtered;
587 mpls_bool in_tree;
588 struct ldp_session *session;
589 uint32_t attempt_count;
590 mpls_timer_handle action_timer;
591 ldp_lsp_state action;
592 ldp_fec *fec;
594 MPLS_LIST_ELEM(ldp_attr) _session;
595 MPLS_LIST_ELEM(ldp_attr) _global;
596 MPLS_LIST_ELEM(ldp_attr) _ds_attr;
597 MPLS_LIST_ELEM(ldp_attr) _fs;
599 mplsLdpFecTlv_t fecTlv;
600 mplsLdpGenLblTlv_t genLblTlv;
601 mplsLdpAtmLblTlv_t atmLblTlv;
602 mplsLdpFrLblTlv_t frLblTlv;
603 mplsLdpHopTlv_t hopCountTlv;
604 mplsLdpPathTlv_t pathVecTlv;
605 mplsLdpLblMsgIdTlv_t lblMsgIdTlv;
606 mplsLdpLspIdTlv_t lspidTlv;
607 mplsLdpTrafficTlv_t trafficTlv;
608 mplsLdpStatusTlv_t statusTlv;
609 mplsLdpRetMsgTlv_t retMsgTlv;
611 uint8_t fecTlvExists:1;
612 uint8_t genLblTlvExists:1;
613 uint8_t atmLblTlvExists:1;
614 uint8_t frLblTlvExists:1;
615 uint8_t hopCountTlvExists:1;
616 uint8_t pathVecTlvExists:1;
617 uint8_t lblMsgIdTlvExists:1;
618 uint8_t lspidTlvExists:1;
619 uint8_t trafficTlvExists:1;
620 uint8_t statusTlvExists:1;
621 uint8_t retMsgTlvExists:1;
623 struct ldp_outlabel *outlabel;
624 struct ldp_inlabel *inlabel;
626 /* only used for get() */
627 uint32_t inlabel_index;
628 uint32_t outlabel_index;
629 uint32_t session_index;
630 } ldp_attr;
632 typedef struct ldp_resource {
633 MPLS_REFCNT_FIELD;
634 MPLS_LIST_ELEM(ldp_resource) _global;
635 struct ldp_tunnel *tunnel;
636 uint32_t index;
637 uint32_t max_rate;
638 uint32_t mean_rate;
639 uint32_t burst_size;
640 } ldp_resource;
642 typedef struct ldp_hop {
643 MPLS_REFCNT_FIELD;
644 MPLS_LIST_ELEM(ldp_hop) _hop_list;
645 struct ldp_hop_list *hop_list;
646 uint32_t index;
647 uint32_t hop_list_index;
648 uint32_t path_option;
649 mpls_inet_addr addr;
650 uint32_t type;
651 } ldp_hop;
653 typedef struct ldp_hop_list {
654 MPLS_REFCNT_FIELD;
655 MPLS_LIST_ELEM(ldp_hop_list) _global;
656 struct _ldp_hop_list hop;
657 struct ldp_tunnel *tunnel;
658 uint32_t index;
659 } ldp_hop_list;
661 typedef struct ldp_tunnel {
662 MPLS_REFCNT_FIELD;
663 MPLS_LIST_ELEM(ldp_tunnel) _global;
664 MPLS_LIST_ELEM(ldp_tunnel) _outlabel;
665 uint32_t index;
666 mpls_inet_addr ingress_lsrid;
667 ldp_addr egress_lsrid;
668 char name[MPLS_MAX_IF_NAME];
669 mpls_bool is_interface;
670 uint32_t outlabel_index;
671 struct ldp_outlabel *outlabel;
672 uint32_t setup_prio;
673 uint32_t hold_prio;
674 uint32_t instance_prio;
675 uint32_t resource_index;
676 struct ldp_resource *resource;
677 uint32_t hop_list_index;
678 struct ldp_hop_list *hop_list;
679 ldp_fec fec;
680 mpls_admin_state_enum admin_state;
682 uint32_t primary_instance;
683 uint32_t any_affinity;
684 uint32_t all_affinity;
685 uint32_t no_all_affinity;
686 uint32_t path_in_use;
687 uint32_t protocol;
688 mpls_bool local_protect;
689 uint32_t session_attr;
690 uint32_t owner;
691 } ldp_tunnel;
693 typedef void (*ldp_fib_callback) (mpls_cfg_handle cfg, mpls_update_enum type,
694 mpls_fec * dest);
695 typedef void (*ldp_ifmgr_callback) (mpls_cfg_handle cfg, mpls_update_enum type,
696 mpls_inet_addr *addr);
697 typedef void (*ldp_tree_callback) (void *);
699 #endif