nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /*
2 * netlink-types.h Netlink Types (Private)
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation version 2.1
7 * of the License.
8 *
9 * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
10 */
11  
12 #ifndef NETLINK_LOCAL_TYPES_H_
13 #define NETLINK_LOCAL_TYPES_H_
14  
15 #include <netlink/list.h>
16 #include <netlink/route/link.h>
17 #include <netlink/route/qdisc.h>
18 #include <netlink/route/rtnl.h>
19 #include <netlink/route/route.h>
20  
21 #define NL_SOCK_BUFSIZE_SET (1<<0)
22 #define NL_SOCK_PASSCRED (1<<1)
23 #define NL_OWN_PORT (1<<2)
24 #define NL_MSG_PEEK (1<<3)
25 #define NL_NO_AUTO_ACK (1<<4)
26  
27 #define NL_MSG_CRED_PRESENT 1
28  
29 struct nl_cache_ops;
30 struct nl_sock;
31 struct nl_object;
32  
33 struct nl_cb
34 {
35 nl_recvmsg_msg_cb_t cb_set[NL_CB_TYPE_MAX+1];
36 void * cb_args[NL_CB_TYPE_MAX+1];
37  
38 nl_recvmsg_err_cb_t cb_err;
39 void * cb_err_arg;
40  
41 /** May be used to replace nl_recvmsgs with your own implementation
42 * in all internal calls to nl_recvmsgs. */
43 int (*cb_recvmsgs_ow)(struct nl_sock *,
44 struct nl_cb *);
45  
46 /** Overwrite internal calls to nl_recv, must return the number of
47 * octets read and allocate a buffer for the received data. */
48 int (*cb_recv_ow)(struct nl_sock *,
49 struct sockaddr_nl *,
50 unsigned char **,
51 struct ucred **);
52  
53 /** Overwrites internal calls to nl_send, must send the netlink
54 * message. */
55 int (*cb_send_ow)(struct nl_sock *,
56 struct nl_msg *);
57  
58 int cb_refcnt;
59 };
60  
61 struct nl_sock
62 {
63 struct sockaddr_nl s_local;
64 struct sockaddr_nl s_peer;
65 int s_fd;
66 int s_proto;
67 unsigned int s_seq_next;
68 unsigned int s_seq_expect;
69 int s_flags;
70 struct nl_cb * s_cb;
71 };
72  
73 struct nl_cache
74 {
75 struct nl_list_head c_items;
76 int c_nitems;
77 int c_iarg1;
78 int c_iarg2;
79 struct nl_cache_ops * c_ops;
80 };
81  
82 struct nl_cache_assoc
83 {
84 struct nl_cache * ca_cache;
85 change_func_t ca_change;
86 void * ca_change_data;
87 };
88  
89 struct nl_cache_mngr
90 {
91 int cm_protocol;
92 int cm_flags;
93 int cm_nassocs;
94 struct nl_sock * cm_handle;
95 struct nl_cache_assoc * cm_assocs;
96 };
97  
98 struct nl_parser_param;
99  
100 #define LOOSE_COMPARISON 1
101  
102 #define NL_OBJ_MARK 1
103  
104 struct nl_object
105 {
106 NLHDR_COMMON
107 };
108  
109 struct nl_data
110 {
111 size_t d_size;
112 void * d_data;
113 };
114  
115 struct nl_addr
116 {
117 int a_family;
118 unsigned int a_maxsize;
119 unsigned int a_len;
120 int a_prefixlen;
121 int a_refcnt;
122 char a_addr[0];
123 };
124  
125 struct nl_msg
126 {
127 int nm_protocol;
128 int nm_flags;
129 struct sockaddr_nl nm_src;
130 struct sockaddr_nl nm_dst;
131 struct ucred nm_creds;
132 struct nlmsghdr * nm_nlh;
133 size_t nm_size;
134 int nm_refcnt;
135 };
136  
137 struct rtnl_link_map
138 {
139 uint64_t lm_mem_start;
140 uint64_t lm_mem_end;
141 uint64_t lm_base_addr;
142 uint16_t lm_irq;
143 uint8_t lm_dma;
144 uint8_t lm_port;
145 };
146  
147 #define IFQDISCSIZ 32
148  
149 struct rtnl_link
150 {
151 NLHDR_COMMON
152  
153 char l_name[IFNAMSIZ];
154  
155 uint32_t l_family;
156 uint32_t l_arptype;
157 uint32_t l_index;
158 uint32_t l_flags;
159 uint32_t l_change;
160 uint32_t l_mtu;
161 uint32_t l_link;
162 uint32_t l_txqlen;
163 uint32_t l_weight;
164 uint32_t l_master;
165 struct nl_addr *l_addr;
166 struct nl_addr *l_bcast;
167 char l_qdisc[IFQDISCSIZ];
168 struct rtnl_link_map l_map;
169 uint64_t l_stats[RTNL_LINK_STATS_MAX+1];
170 uint32_t l_flag_mask;
171 uint8_t l_operstate;
172 uint8_t l_linkmode;
173 /* 2 byte hole */
174 struct rtnl_link_info_ops *l_info_ops;
175 void * l_info;
176 };
177  
178 struct rtnl_ncacheinfo
179 {
180 uint32_t nci_confirmed; /**< Time since neighbour validty was last confirmed */
181 uint32_t nci_used; /**< Time since neighbour entry was last ued */
182 uint32_t nci_updated; /**< Time since last update */
183 uint32_t nci_refcnt; /**< Reference counter */
184 };
185  
186  
187 struct rtnl_neigh
188 {
189 NLHDR_COMMON
190 uint32_t n_family;
191 uint32_t n_ifindex;
192 uint16_t n_state;
193 uint8_t n_flags;
194 uint8_t n_type;
195 struct nl_addr *n_lladdr;
196 struct nl_addr *n_dst;
197 uint32_t n_probes;
198 struct rtnl_ncacheinfo n_cacheinfo;
199 uint32_t n_state_mask;
200 uint32_t n_flag_mask;
201 };
202  
203  
204 struct rtnl_addr_cacheinfo
205 {
206 /* Preferred lifetime in seconds */
207 uint32_t aci_prefered;
208  
209 /* Valid lifetime in seconds */
210 uint32_t aci_valid;
211  
212 /* Timestamp of creation in 1/100s seince boottime */
213 uint32_t aci_cstamp;
214  
215 /* Timestamp of last update in 1/100s since boottime */
216 uint32_t aci_tstamp;
217 };
218  
219 struct rtnl_addr
220 {
221 NLHDR_COMMON
222  
223 uint8_t a_family;
224 uint8_t a_prefixlen;
225 uint8_t a_flags;
226 uint8_t a_scope;
227 uint32_t a_ifindex;
228  
229 struct nl_addr *a_peer;
230 struct nl_addr *a_local;
231 struct nl_addr *a_bcast;
232 struct nl_addr *a_anycast;
233 struct nl_addr *a_multicast;
234  
235 struct rtnl_addr_cacheinfo a_cacheinfo;
236  
237 char a_label[IFNAMSIZ];
238 uint32_t a_flag_mask;
239 };
240  
241 struct rtnl_nexthop
242 {
243 uint8_t rtnh_flags;
244 uint8_t rtnh_flag_mask;
245 uint8_t rtnh_weight;
246 /* 1 byte spare */
247 uint32_t rtnh_ifindex;
248 struct nl_addr * rtnh_gateway;
249 uint32_t ce_mask; /* HACK to support attr macros */
250 struct nl_list_head rtnh_list;
251 uint32_t rtnh_realms;
252 };
253  
254 struct rtnl_route
255 {
256 NLHDR_COMMON
257  
258 uint8_t rt_family;
259 uint8_t rt_dst_len;
260 uint8_t rt_src_len;
261 uint8_t rt_tos;
262 uint8_t rt_protocol;
263 uint8_t rt_scope;
264 uint8_t rt_type;
265 uint8_t rt_nmetrics;
266 uint32_t rt_flags;
267 struct nl_addr * rt_dst;
268 struct nl_addr * rt_src;
269 uint32_t rt_table;
270 uint32_t rt_iif;
271 uint32_t rt_prio;
272 uint32_t rt_metrics[RTAX_MAX];
273 uint32_t rt_metrics_mask;
274 uint32_t rt_nr_nh;
275 struct nl_addr * rt_pref_src;
276 struct nl_list_head rt_nexthops;
277 struct rtnl_rtcacheinfo rt_cacheinfo;
278 uint32_t rt_flag_mask;
279 };
280  
281 struct rtnl_rule
282 {
283 NLHDR_COMMON
284  
285 uint64_t r_mark;
286 uint32_t r_prio;
287 uint32_t r_realms;
288 uint32_t r_table;
289 uint8_t r_dsfield;
290 uint8_t r_type;
291 uint8_t r_family;
292 uint8_t r_src_len;
293 uint8_t r_dst_len;
294 char r_iif[IFNAMSIZ];
295 struct nl_addr *r_src;
296 struct nl_addr *r_dst;
297 struct nl_addr *r_srcmap;
298 };
299  
300 struct rtnl_neightbl_parms
301 {
302 /**
303 * Interface index of the device this parameter set is assigned
304 * to or 0 for the default set.
305 */
306 uint32_t ntp_ifindex;
307  
308 /**
309 * Number of references to this parameter set.
310 */
311 uint32_t ntp_refcnt;
312  
313 /**
314 * Queue length for pending arp requests, i.e. the number of
315 * packets which are accepted from other layers while the
316 * neighbour address is still being resolved
317 */
318 uint32_t ntp_queue_len;
319  
320 /**
321 * Number of requests to send to the user level ARP daemon.
322 * Specify 0 to disable.
323 */
324 uint32_t ntp_app_probes;
325  
326 /**
327 * Maximum number of retries for unicast solicitation.
328 */
329 uint32_t ntp_ucast_probes;
330  
331 /**
332 * Maximum number of retries for multicast solicitation.
333 */
334 uint32_t ntp_mcast_probes;
335  
336 /**
337 * Base value in milliseconds to ompute reachable time, see RFC2461.
338 */
339 uint64_t ntp_base_reachable_time;
340  
341 /**
342 * Actual reachable time (read-only)
343 */
344 uint64_t ntp_reachable_time; /* secs */
345  
346 /**
347 * The time in milliseconds between retransmitted Neighbor
348 * Solicitation messages.
349 */
350 uint64_t ntp_retrans_time;
351  
352 /**
353 * Interval in milliseconds to check for stale neighbour
354 * entries.
355 */
356 uint64_t ntp_gc_stale_time; /* secs */
357  
358 /**
359 * Delay in milliseconds for the first time probe if
360 * the neighbour is reachable.
361 */
362 uint64_t ntp_probe_delay; /* secs */
363  
364 /**
365 * Maximum delay in milliseconds of an answer to a neighbour
366 * solicitation message.
367 */
368 uint64_t ntp_anycast_delay;
369  
370 /**
371 * Minimum age in milliseconds before a neighbour entry
372 * may be replaced.
373 */
374 uint64_t ntp_locktime;
375  
376 /**
377 * Delay in milliseconds before answering to an ARP request
378 * for which a proxy ARP entry exists.
379 */
380 uint64_t ntp_proxy_delay;
381  
382 /**
383 * Queue length for the delayed proxy arp requests.
384 */
385 uint32_t ntp_proxy_qlen;
386  
387 /**
388 * Mask of available parameter attributes
389 */
390 uint32_t ntp_mask;
391 };
392  
393 #define NTBLNAMSIZ 32
394  
395 /**
396 * Neighbour table
397 * @ingroup neightbl
398 */
399 struct rtnl_neightbl
400 {
401 NLHDR_COMMON
402  
403 char nt_name[NTBLNAMSIZ];
404 uint32_t nt_family;
405 uint32_t nt_gc_thresh1;
406 uint32_t nt_gc_thresh2;
407 uint32_t nt_gc_thresh3;
408 uint64_t nt_gc_interval;
409 struct ndt_config nt_config;
410 struct rtnl_neightbl_parms nt_parms;
411 struct ndt_stats nt_stats;
412 };
413  
414 struct rtnl_ratespec
415 {
416 uint8_t rs_cell_log;
417 uint16_t rs_feature;
418 uint16_t rs_addend;
419 uint16_t rs_mpu;
420 uint32_t rs_rate;
421 };
422  
423 struct rtnl_tstats
424 {
425 struct {
426 uint64_t bytes;
427 uint64_t packets;
428 } tcs_basic;
429  
430 struct {
431 uint32_t bps;
432 uint32_t pps;
433 } tcs_rate_est;
434  
435 struct {
436 uint32_t qlen;
437 uint32_t backlog;
438 uint32_t drops;
439 uint32_t requeues;
440 uint32_t overlimits;
441 } tcs_queue;
442 };
443  
444 #define TCKINDSIZ 32
445  
446 #define NL_TCA_GENERIC(pre) \
447 NLHDR_COMMON \
448 uint32_t pre ##_family; \
449 uint32_t pre ##_ifindex; \
450 uint32_t pre ##_handle; \
451 uint32_t pre ##_parent; \
452 uint32_t pre ##_info; \
453 char pre ##_kind[TCKINDSIZ]; \
454 struct nl_data * pre ##_opts; \
455 uint64_t pre ##_stats[RTNL_TC_STATS_MAX+1]; \
456 struct nl_data * pre ##_xstats; \
457 struct nl_data * pre ##_subdata; \
458  
459  
460 struct rtnl_tca
461 {
462 NL_TCA_GENERIC(tc);
463 };
464  
465 struct rtnl_qdisc
466 {
467 NL_TCA_GENERIC(q);
468 struct rtnl_qdisc_ops *q_ops;
469 };
470  
471 struct rtnl_class
472 {
473 NL_TCA_GENERIC(c);
474 struct rtnl_class_ops *c_ops;
475 };
476  
477 struct rtnl_cls
478 {
479 NL_TCA_GENERIC(c);
480 uint16_t c_prio;
481 uint16_t c_protocol;
482 struct rtnl_cls_ops *c_ops;
483 };
484  
485 struct rtnl_u32
486 {
487 uint32_t cu_divisor;
488 uint32_t cu_hash;
489 uint32_t cu_classid;
490 uint32_t cu_link;
491 struct nl_data * cu_pcnt;
492 struct nl_data * cu_selector;
493 struct nl_data * cu_act;
494 struct nl_data * cu_police;
495 char cu_indev[IFNAMSIZ];
496 int cu_mask;
497 };
498  
499 struct rtnl_cgroup
500 {
501 struct rtnl_ematch_tree *cg_ematch;
502 int cg_mask;
503 };
504  
505 struct rtnl_fw
506 {
507 uint32_t cf_classid;
508 struct nl_data * cf_act;
509 struct nl_data * cf_police;
510 char cf_indev[IFNAMSIZ];
511 int cf_mask;
512 };
513  
514 struct rtnl_ematch
515 {
516 uint16_t e_id;
517 uint16_t e_kind;
518 uint16_t e_flags;
519  
520 struct nl_list_head e_childs;
521 struct nl_list_head e_list;
522 struct rtnl_ematch_ops *e_ops;
523  
524 char e_data[0];
525 };
526  
527 struct rtnl_ematch_tree
528 {
529 uint16_t et_progid;
530 struct nl_list_head et_list;
531  
532 };
533  
534 struct rtnl_dsmark_qdisc
535 {
536 uint16_t qdm_indices;
537 uint16_t qdm_default_index;
538 uint32_t qdm_set_tc_index;
539 uint32_t qdm_mask;
540 };
541  
542 struct rtnl_dsmark_class
543 {
544 uint8_t cdm_bmask;
545 uint8_t cdm_value;
546 uint32_t cdm_mask;
547 };
548  
549 struct rtnl_fifo
550 {
551 uint32_t qf_limit;
552 uint32_t qf_mask;
553 };
554  
555 struct rtnl_prio
556 {
557 uint32_t qp_bands;
558 uint8_t qp_priomap[TC_PRIO_MAX+1];
559 uint32_t qp_mask;
560 };
561  
562 struct rtnl_tbf
563 {
564 uint32_t qt_limit;
565 uint32_t qt_mpu;
566 struct rtnl_ratespec qt_rate;
567 uint32_t qt_rate_bucket;
568 uint32_t qt_rate_txtime;
569 struct rtnl_ratespec qt_peakrate;
570 uint32_t qt_peakrate_bucket;
571 uint32_t qt_peakrate_txtime;
572 uint32_t qt_mask;
573 };
574  
575 struct rtnl_sfq
576 {
577 uint32_t qs_quantum;
578 uint32_t qs_perturb;
579 uint32_t qs_limit;
580 uint32_t qs_divisor;
581 uint32_t qs_flows;
582 uint32_t qs_mask;
583 };
584  
585 struct rtnl_netem_corr
586 {
587 uint32_t nmc_delay;
588 uint32_t nmc_loss;
589 uint32_t nmc_duplicate;
590 };
591  
592 struct rtnl_netem_reo
593 {
594 uint32_t nmro_probability;
595 uint32_t nmro_correlation;
596 };
597  
598 struct rtnl_netem_crpt
599 {
600 uint32_t nmcr_probability;
601 uint32_t nmcr_correlation;
602 };
603  
604 struct rtnl_netem_dist
605 {
606 int16_t * dist_data;
607 size_t dist_size;
608 };
609  
610 struct rtnl_netem
611 {
612 uint32_t qnm_latency;
613 uint32_t qnm_limit;
614 uint32_t qnm_loss;
615 uint32_t qnm_gap;
616 uint32_t qnm_duplicate;
617 uint32_t qnm_jitter;
618 uint32_t qnm_mask;
619 struct rtnl_netem_corr qnm_corr;
620 struct rtnl_netem_reo qnm_ro;
621 struct rtnl_netem_crpt qnm_crpt;
622 struct rtnl_netem_dist qnm_dist;
623 };
624  
625 struct rtnl_htb_qdisc
626 {
627 uint32_t qh_rate2quantum;
628 uint32_t qh_defcls;
629 uint32_t qh_mask;
630 };
631  
632 struct rtnl_htb_class
633 {
634 uint32_t ch_prio;
635 uint32_t ch_mtu;
636 struct rtnl_ratespec ch_rate;
637 struct rtnl_ratespec ch_ceil;
638 uint32_t ch_rbuffer;
639 uint32_t ch_cbuffer;
640 uint32_t ch_quantum;
641 uint8_t ch_overhead;
642 uint8_t ch_mpu;
643 uint32_t ch_mask;
644 };
645  
646 struct rtnl_cbq
647 {
648 struct tc_cbq_lssopt cbq_lss;
649 struct tc_ratespec cbq_rate;
650 struct tc_cbq_wrropt cbq_wrr;
651 struct tc_cbq_ovl cbq_ovl;
652 struct tc_cbq_fopt cbq_fopt;
653 struct tc_cbq_police cbq_police;
654 };
655  
656 struct rtnl_red
657 {
658 uint32_t qr_limit;
659 uint32_t qr_qth_min;
660 uint32_t qr_qth_max;
661 uint8_t qr_flags;
662 uint8_t qr_wlog;
663 uint8_t qr_plog;
664 uint8_t qr_scell_log;
665 uint32_t qr_mask;
666 };
667  
668 struct flnl_request
669 {
670 NLHDR_COMMON
671  
672 struct nl_addr * lr_addr;
673 uint32_t lr_fwmark;
674 uint8_t lr_tos;
675 uint8_t lr_scope;
676 uint8_t lr_table;
677 };
678  
679  
680 struct flnl_result
681 {
682 NLHDR_COMMON
683  
684 struct flnl_request * fr_req;
685 uint8_t fr_table_id;
686 uint8_t fr_prefixlen;
687 uint8_t fr_nh_sel;
688 uint8_t fr_type;
689 uint8_t fr_scope;
690 uint32_t fr_error;
691 };
692  
693 #define GENL_OP_HAS_POLICY 1
694 #define GENL_OP_HAS_DOIT 2
695 #define GENL_OP_HAS_DUMPIT 4
696  
697 struct genl_family_op
698 {
699 uint32_t o_id;
700 uint32_t o_flags;
701  
702 struct nl_list_head o_list;
703 };
704  
705 struct genl_family
706 {
707 NLHDR_COMMON
708  
709 uint16_t gf_id;
710 char gf_name[GENL_NAMSIZ];
711 uint32_t gf_version;
712 uint32_t gf_hdrsize;
713 uint32_t gf_maxattr;
714  
715 struct nl_list_head gf_ops;
716 };
717  
718 union nfnl_ct_proto
719 {
720 struct {
721 uint16_t src;
722 uint16_t dst;
723 } port;
724 struct {
725 uint16_t id;
726 uint8_t type;
727 uint8_t code;
728 } icmp;
729 };
730  
731 struct nfnl_ct_dir {
732 struct nl_addr * src;
733 struct nl_addr * dst;
734 union nfnl_ct_proto proto;
735 uint64_t packets;
736 uint64_t bytes;
737 };
738  
739 union nfnl_ct_protoinfo {
740 struct {
741 uint8_t state;
742 } tcp;
743 };
744  
745 struct nfnl_ct {
746 NLHDR_COMMON
747  
748 uint8_t ct_family;
749 uint8_t ct_proto;
750 union nfnl_ct_protoinfo ct_protoinfo;
751  
752 uint32_t ct_status;
753 uint32_t ct_status_mask;
754 uint32_t ct_timeout;
755 uint32_t ct_mark;
756 uint32_t ct_use;
757 uint32_t ct_id;
758  
759 struct nfnl_ct_dir ct_orig;
760 struct nfnl_ct_dir ct_repl;
761 };
762  
763 struct nfnl_log {
764 NLHDR_COMMON
765  
766 uint16_t log_group;
767 uint8_t log_copy_mode;
768 uint32_t log_copy_range;
769 uint32_t log_flush_timeout;
770 uint32_t log_alloc_size;
771 uint32_t log_queue_threshold;
772 uint32_t log_flags;
773 uint32_t log_flag_mask;
774 };
775  
776 struct nfnl_log_msg {
777 NLHDR_COMMON
778  
779 uint8_t log_msg_family;
780 uint8_t log_msg_hook;
781 uint16_t log_msg_hwproto;
782 uint32_t log_msg_mark;
783 struct timeval log_msg_timestamp;
784 uint32_t log_msg_indev;
785 uint32_t log_msg_outdev;
786 uint32_t log_msg_physindev;
787 uint32_t log_msg_physoutdev;
788 uint8_t log_msg_hwaddr[8];
789 int log_msg_hwaddr_len;
790 void * log_msg_payload;
791 int log_msg_payload_len;
792 char * log_msg_prefix;
793 uint32_t log_msg_uid;
794 uint32_t log_msg_gid;
795 uint32_t log_msg_seq;
796 uint32_t log_msg_seq_global;
797 };
798  
799 struct nfnl_queue {
800 NLHDR_COMMON
801  
802 uint16_t queue_group;
803 uint32_t queue_maxlen;
804 uint32_t queue_copy_range;
805 uint8_t queue_copy_mode;
806 };
807  
808 struct nfnl_queue_msg {
809 NLHDR_COMMON
810  
811 uint16_t queue_msg_group;
812 uint8_t queue_msg_family;
813 uint8_t queue_msg_hook;
814 uint16_t queue_msg_hwproto;
815 uint32_t queue_msg_packetid;
816 uint32_t queue_msg_mark;
817 struct timeval queue_msg_timestamp;
818 uint32_t queue_msg_indev;
819 uint32_t queue_msg_outdev;
820 uint32_t queue_msg_physindev;
821 uint32_t queue_msg_physoutdev;
822 uint8_t queue_msg_hwaddr[8];
823 int queue_msg_hwaddr_len;
824 void * queue_msg_payload;
825 int queue_msg_payload_len;
826 uint32_t queue_msg_verdict;
827 };
828  
829 #endif