1 /* 2 * netlink-private/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-2013 Thomas Graf <tgraf@suug.ch> 10 * Copyright (c) 2013 Sassano Systems LLC <joe@sassanosystems.com> 11 */ 12 13 #ifndef NETLINK_LOCAL_TYPES_H_ 14 #define NETLINK_LOCAL_TYPES_H_ 15 16 #include <netlink/list.h> 17 #include <netlink/route/link.h> 18 #include <netlink/route/qdisc.h> 19 #include <netlink/route/rtnl.h> 20 #include <netlink/route/route.h> 21 #include <netlink/idiag/idiagnl.h> 22 #include <netlink/netfilter/ct.h> 23 #include <netlink-private/route/tc-api.h> 24 #include <linux/tc_act/tc_mirred.h> 25 26 #define NL_SOCK_BUFSIZE_SET (1<<0) 27 #define NL_SOCK_PASSCRED (1<<1) 28 #define NL_OWN_PORT (1<<2) 29 #define NL_MSG_PEEK (1<<3) 30 #define NL_NO_AUTO_ACK (1<<4) 31 32 #define NL_MSG_CRED_PRESENT 1 33 34 struct nl_cache_ops; 35 struct nl_sock; 36 struct nl_object; 37 struct nl_hash_table; 38 39 struct nl_cb 40 { 41 nl_recvmsg_msg_cb_t cb_set[NL_CB_TYPE_MAX+1]; 42 void * cb_args[NL_CB_TYPE_MAX+1]; 43 44 nl_recvmsg_err_cb_t cb_err; 45 void * cb_err_arg; 46 47 /** May be used to replace nl_recvmsgs with your own implementation 48 * in all internal calls to nl_recvmsgs. */ 49 int (*cb_recvmsgs_ow)(struct nl_sock *, 50 struct nl_cb *); 51 52 /** Overwrite internal calls to nl_recv, must return the number of 53 * octets read and allocate a buffer for the received data. */ 54 int (*cb_recv_ow)(struct nl_sock *, 55 struct sockaddr_nl *, 56 unsigned char **, 57 struct ucred **); 58 59 /** Overwrites internal calls to nl_send, must send the netlink 60 * message. */ 61 int (*cb_send_ow)(struct nl_sock *, 62 struct nl_msg *); 63 64 int cb_refcnt; 65 /** indicates the callback that is currently active */ 66 enum nl_cb_type cb_active; 67 }; 68 69 struct nl_sock 70 { 71 struct sockaddr_nl s_local; 72 struct sockaddr_nl s_peer; 73 int s_fd; 74 int s_proto; 75 unsigned int s_seq_next; 76 unsigned int s_seq_expect; 77 int s_flags; 78 struct nl_cb * s_cb; 79 size_t s_bufsize; 80 }; 81 82 struct nl_cache 83 { 84 struct nl_list_head c_items; 85 int c_nitems; 86 int c_iarg1; 87 int c_iarg2; 88 int c_refcnt; 89 unsigned int c_flags; 90 struct nl_hash_table * hashtable; 91 struct nl_cache_ops * c_ops; 92 }; 93 94 struct nl_cache_assoc 95 { 96 struct nl_cache * ca_cache; 97 change_func_t ca_change; 98 void * ca_change_data; 99 }; 100 101 struct nl_cache_mngr 102 { 103 int cm_protocol; 104 int cm_flags; 105 int cm_nassocs; 106 struct nl_sock * cm_sock; 107 struct nl_sock * cm_sync_sock; 108 struct nl_cache_assoc * cm_assocs; 109 }; 110 111 struct nl_parser_param; 112 113 #define LOOSE_COMPARISON 1 114 115 #define NL_OBJ_MARK 1 116 117 struct nl_data 118 { 119 size_t d_size; 120 void * d_data; 121 }; 122 123 struct nl_addr 124 { 125 int a_family; 126 unsigned int a_maxsize; 127 unsigned int a_len; 128 int a_prefixlen; 129 int a_refcnt; 130 char a_addr[0]; 131 }; 132 133 struct nl_msg 134 { 135 int nm_protocol; 136 int nm_flags; 137 struct sockaddr_nl nm_src; 138 struct sockaddr_nl nm_dst; 139 struct ucred nm_creds; 140 struct nlmsghdr * nm_nlh; 141 size_t nm_size; 142 int nm_refcnt; 143 }; 144 145 struct rtnl_link_map 146 { 147 uint64_t lm_mem_start; 148 uint64_t lm_mem_end; 149 uint64_t lm_base_addr; 150 uint16_t lm_irq; 151 uint8_t lm_dma; 152 uint8_t lm_port; 153 }; 154 155 #define IFQDISCSIZ 32 156 157 struct rtnl_link 158 { 159 NLHDR_COMMON 160 161 char l_name[IFNAMSIZ]; 162 uint32_t l_family; 163 uint32_t l_arptype; 164 uint32_t l_index; 165 uint32_t l_flags; 166 uint32_t l_change; 167 uint32_t l_mtu; 168 uint32_t l_link; 169 uint32_t l_txqlen; 170 uint32_t l_weight; 171 uint32_t l_master; 172 struct nl_addr * l_addr; 173 struct nl_addr * l_bcast; 174 char l_qdisc[IFQDISCSIZ]; 175 struct rtnl_link_map l_map; 176 uint64_t l_stats[RTNL_LINK_STATS_MAX+1]; 177 uint32_t l_flag_mask; 178 uint32_t l_num_vf; 179 uint8_t l_operstate; 180 uint8_t l_linkmode; 181 /* 2 byte hole */ 182 char * l_info_kind; 183 struct rtnl_link_info_ops * l_info_ops; 184 void * l_af_data[AF_MAX]; 185 void * l_info; 186 char * l_ifalias; 187 uint32_t l_promiscuity; 188 uint32_t l_num_tx_queues; 189 uint32_t l_num_rx_queues; 190 uint32_t l_group; 191 uint8_t l_carrier; 192 /* 3 byte hole */ 193 struct rtnl_link_af_ops * l_af_ops; 194 struct nl_data * l_phys_port_id; 195 int l_ns_fd; 196 pid_t l_ns_pid; 197 }; 198 199 struct rtnl_ncacheinfo 200 { 201 uint32_t nci_confirmed; /**< Time since neighbour validty was last confirmed */ 202 uint32_t nci_used; /**< Time since neighbour entry was last ued */ 203 uint32_t nci_updated; /**< Time since last update */ 204 uint32_t nci_refcnt; /**< Reference counter */ 205 }; 206 207 208 struct rtnl_neigh 209 { 210 NLHDR_COMMON 211 uint32_t n_family; 212 uint32_t n_ifindex; 213 uint16_t n_state; 214 uint8_t n_flags; 215 uint8_t n_type; 216 struct nl_addr *n_lladdr; 217 struct nl_addr *n_dst; 218 uint32_t n_probes; 219 struct rtnl_ncacheinfo n_cacheinfo; 220 uint32_t n_state_mask; 221 uint32_t n_flag_mask; 222 uint32_t n_master; 223 }; 224 225 226 struct rtnl_addr_cacheinfo 227 { 228 /* Preferred lifetime in seconds, ticking from when the message gets constructed */ 229 uint32_t aci_prefered; 230 231 /* Valid lifetime in seconds, ticking from when the message gets constructed */ 232 uint32_t aci_valid; 233 234 /* Timestamp of creation in 1/100s since boottime, clock_gettime(CLOCK_MONOTONIC) */ 235 uint32_t aci_cstamp; 236 237 /* Timestamp of last update in 1/100s since boottime, clock_gettime(CLOCK_MONOTONIC) */ 238 uint32_t aci_tstamp; 239 }; 240 241 struct rtnl_addr 242 { 243 NLHDR_COMMON 244 245 uint8_t a_family; 246 uint8_t a_prefixlen; 247 uint8_t a_scope; 248 uint32_t a_flags; 249 uint32_t a_ifindex; 250 251 struct nl_addr *a_peer; 252 struct nl_addr *a_local; 253 struct nl_addr *a_bcast; 254 struct nl_addr *a_anycast; 255 struct nl_addr *a_multicast; 256 257 struct rtnl_addr_cacheinfo a_cacheinfo; 258 259 char a_label[IFNAMSIZ]; 260 uint32_t a_flag_mask; 261 struct rtnl_link *a_link; 262 }; 263 264 struct rtnl_nexthop 265 { 266 uint8_t rtnh_flags; 267 uint8_t rtnh_flag_mask; 268 uint8_t rtnh_weight; 269 /* 1 byte spare */ 270 uint32_t rtnh_ifindex; 271 struct nl_addr * rtnh_gateway; 272 uint32_t ce_mask; /* HACK to support attr macros */ 273 struct nl_list_head rtnh_list; 274 uint32_t rtnh_realms; 275 }; 276 277 struct rtnl_route 278 { 279 NLHDR_COMMON 280 281 uint8_t rt_family; 282 uint8_t rt_dst_len; 283 uint8_t rt_src_len; 284 uint8_t rt_tos; 285 uint8_t rt_protocol; 286 uint8_t rt_scope; 287 uint8_t rt_type; 288 uint8_t rt_nmetrics; 289 uint32_t rt_flags; 290 struct nl_addr * rt_dst; 291 struct nl_addr * rt_src; 292 uint32_t rt_table; 293 uint32_t rt_iif; 294 uint32_t rt_prio; 295 uint32_t rt_metrics[RTAX_MAX]; 296 uint32_t rt_metrics_mask; 297 uint32_t rt_nr_nh; 298 struct nl_addr * rt_pref_src; 299 struct nl_list_head rt_nexthops; 300 struct rtnl_rtcacheinfo rt_cacheinfo; 301 uint32_t rt_flag_mask; 302 }; 303 304 struct rtnl_rule 305 { 306 NLHDR_COMMON 307 uint8_t r_family; 308 uint8_t r_action; 309 uint8_t r_dsfield; /* ipv4 only */ 310 uint8_t r_unused; 311 uint32_t r_table; 312 uint32_t r_flags; 313 uint32_t r_prio; 314 uint32_t r_mark; 315 uint32_t r_mask; 316 uint32_t r_goto; 317 uint32_t r_flow; /* ipv4 only */ 318 struct nl_addr *r_src; 319 struct nl_addr *r_dst; 320 char r_iifname[IFNAMSIZ]; 321 char r_oifname[IFNAMSIZ]; 322 }; 323 324 struct rtnl_neightbl_parms 325 { 326 /** 327 * Interface index of the device this parameter set is assigned 328 * to or 0 for the default set. 329 */ 330 uint32_t ntp_ifindex; 331 332 /** 333 * Number of references to this parameter set. 334 */ 335 uint32_t ntp_refcnt; 336 337 /** 338 * Queue length for pending arp requests, i.e. the number of 339 * packets which are accepted from other layers while the 340 * neighbour address is still being resolved 341 */ 342 uint32_t ntp_queue_len; 343 344 /** 345 * Number of requests to send to the user level ARP daemon. 346 * Specify 0 to disable. 347 */ 348 uint32_t ntp_app_probes; 349 350 /** 351 * Maximum number of retries for unicast solicitation. 352 */ 353 uint32_t ntp_ucast_probes; 354 355 /** 356 * Maximum number of retries for multicast solicitation. 357 */ 358 uint32_t ntp_mcast_probes; 359 360 /** 361 * Base value in milliseconds to ompute reachable time, see RFC2461. 362 */ 363 uint64_t ntp_base_reachable_time; 364 365 /** 366 * Actual reachable time (read-only) 367 */ 368 uint64_t ntp_reachable_time; /* secs */ 369 370 /** 371 * The time in milliseconds between retransmitted Neighbor 372 * Solicitation messages. 373 */ 374 uint64_t ntp_retrans_time; 375 376 /** 377 * Interval in milliseconds to check for stale neighbour 378 * entries. 379 */ 380 uint64_t ntp_gc_stale_time; /* secs */ 381 382 /** 383 * Delay in milliseconds for the first time probe if 384 * the neighbour is reachable. 385 */ 386 uint64_t ntp_probe_delay; /* secs */ 387 388 /** 389 * Maximum delay in milliseconds of an answer to a neighbour 390 * solicitation message. 391 */ 392 uint64_t ntp_anycast_delay; 393 394 /** 395 * Minimum age in milliseconds before a neighbour entry 396 * may be replaced. 397 */ 398 uint64_t ntp_locktime; 399 400 /** 401 * Delay in milliseconds before answering to an ARP request 402 * for which a proxy ARP entry exists. 403 */ 404 uint64_t ntp_proxy_delay; 405 406 /** 407 * Queue length for the delayed proxy arp requests. 408 */ 409 uint32_t ntp_proxy_qlen; 410 411 /** 412 * Mask of available parameter attributes 413 */ 414 uint32_t ntp_mask; 415 }; 416 417 #define NTBLNAMSIZ 32 418 419 /** 420 * Neighbour table 421 * @ingroup neightbl 422 */ 423 struct rtnl_neightbl 424 { 425 NLHDR_COMMON 426 427 char nt_name[NTBLNAMSIZ]; 428 uint32_t nt_family; 429 uint32_t nt_gc_thresh1; 430 uint32_t nt_gc_thresh2; 431 uint32_t nt_gc_thresh3; 432 uint64_t nt_gc_interval; 433 struct ndt_config nt_config; 434 struct rtnl_neightbl_parms nt_parms; 435 struct ndt_stats nt_stats; 436 }; 437 438 struct rtnl_ratespec 439 { 440 uint8_t rs_cell_log; 441 uint16_t rs_overhead; 442 int16_t rs_cell_align; 443 uint16_t rs_mpu; 444 uint32_t rs_rate; 445 }; 446 447 struct rtnl_tstats 448 { 449 struct { 450 uint64_t bytes; 451 uint64_t packets; 452 } tcs_basic; 453 454 struct { 455 uint32_t bps; 456 uint32_t pps; 457 } tcs_rate_est; 458 459 struct { 460 uint32_t qlen; 461 uint32_t backlog; 462 uint32_t drops; 463 uint32_t requeues; 464 uint32_t overlimits; 465 } tcs_queue; 466 }; 467 468 #define TCKINDSIZ 32 469 470 #define NL_TC_GENERIC(pre) \ 471 NLHDR_COMMON \ 472 uint32_t pre ##_family; \ 473 uint32_t pre ##_ifindex; \ 474 uint32_t pre ##_handle; \ 475 uint32_t pre ##_parent; \ 476 uint32_t pre ##_info; \ 477 uint32_t pre ##_mtu; \ 478 uint32_t pre ##_mpu; \ 479 uint32_t pre ##_overhead; \ 480 uint32_t pre ##_linktype; \ 481 char pre ##_kind[TCKINDSIZ]; \ 482 struct nl_data * pre ##_opts; \ 483 uint64_t pre ##_stats[RTNL_TC_STATS_MAX+1]; \ 484 struct nl_data * pre ##_xstats; \ 485 struct nl_data * pre ##_subdata; \ 486 struct rtnl_link * pre ##_link; \ 487 struct rtnl_tc_ops * pre ##_ops; \ 488 enum rtnl_tc_type pre ##_type 489 490 struct rtnl_tc 491 { 492 NL_TC_GENERIC(tc); 493 }; 494 495 struct rtnl_qdisc 496 { 497 NL_TC_GENERIC(q); 498 }; 499 500 struct rtnl_class 501 { 502 NL_TC_GENERIC(c); 503 }; 504 505 struct rtnl_cls 506 { 507 NL_TC_GENERIC(c); 508 uint16_t c_prio; 509 uint16_t c_protocol; 510 }; 511 512 struct rtnl_act 513 { 514 NL_TC_GENERIC(c); 515 struct rtnl_act * a_next; 516 }; 517 518 struct rtnl_mirred 519 { 520 struct tc_mirred m_parm; 521 }; 522 523 struct rtnl_u32 524 { 525 uint32_t cu_divisor; 526 uint32_t cu_hash; 527 uint32_t cu_classid; 528 uint32_t cu_link; 529 struct nl_data * cu_pcnt; 530 struct nl_data * cu_selector; 531 struct rtnl_act* cu_act; 532 struct nl_data * cu_police; 533 char cu_indev[IFNAMSIZ]; 534 int cu_mask; 535 }; 536 537 struct rtnl_cgroup 538 { 539 struct rtnl_ematch_tree *cg_ematch; 540 int cg_mask; 541 }; 542 543 struct rtnl_fw 544 { 545 uint32_t cf_classid; 546 struct nl_data * cf_act; 547 struct nl_data * cf_police; 548 char cf_indev[IFNAMSIZ]; 549 uint32_t cf_fwmask; 550 int cf_mask; 551 }; 552 553 struct rtnl_ematch 554 { 555 uint16_t e_id; 556 uint16_t e_kind; 557 uint16_t e_flags; 558 uint16_t e_index; 559 size_t e_datalen; 560 561 struct nl_list_head e_childs; 562 struct nl_list_head e_list; 563 struct rtnl_ematch_ops *e_ops; 564 565 void * e_data; 566 }; 567 568 struct rtnl_ematch_tree 569 { 570 uint16_t et_progid; 571 struct nl_list_head et_list; 572 573 }; 574 575 struct rtnl_dsmark_qdisc 576 { 577 uint16_t qdm_indices; 578 uint16_t qdm_default_index; 579 uint32_t qdm_set_tc_index; 580 uint32_t qdm_mask; 581 }; 582 583 struct rtnl_dsmark_class 584 { 585 uint8_t cdm_bmask; 586 uint8_t cdm_value; 587 uint32_t cdm_mask; 588 }; 589 590 struct rtnl_fifo 591 { 592 uint32_t qf_limit; 593 uint32_t qf_mask; 594 }; 595 596 struct rtnl_prio 597 { 598 uint32_t qp_bands; 599 uint8_t qp_priomap[TC_PRIO_MAX+1]; 600 uint32_t qp_mask; 601 }; 602 603 struct rtnl_tbf 604 { 605 uint32_t qt_limit; 606 struct rtnl_ratespec qt_rate; 607 uint32_t qt_rate_bucket; 608 uint32_t qt_rate_txtime; 609 struct rtnl_ratespec qt_peakrate; 610 uint32_t qt_peakrate_bucket; 611 uint32_t qt_peakrate_txtime; 612 uint32_t qt_mask; 613 }; 614 615 struct rtnl_sfq 616 { 617 uint32_t qs_quantum; 618 uint32_t qs_perturb; 619 uint32_t qs_limit; 620 uint32_t qs_divisor; 621 uint32_t qs_flows; 622 uint32_t qs_mask; 623 }; 624 625 struct rtnl_netem_corr 626 { 627 uint32_t nmc_delay; 628 uint32_t nmc_loss; 629 uint32_t nmc_duplicate; 630 }; 631 632 struct rtnl_netem_reo 633 { 634 uint32_t nmro_probability; 635 uint32_t nmro_correlation; 636 }; 637 638 struct rtnl_netem_crpt 639 { 640 uint32_t nmcr_probability; 641 uint32_t nmcr_correlation; 642 }; 643 644 struct rtnl_netem_dist 645 { 646 int16_t * dist_data; 647 size_t dist_size; 648 }; 649 650 struct rtnl_netem 651 { 652 uint32_t qnm_latency; 653 uint32_t qnm_limit; 654 uint32_t qnm_loss; 655 uint32_t qnm_gap; 656 uint32_t qnm_duplicate; 657 uint32_t qnm_jitter; 658 uint32_t qnm_mask; 659 struct rtnl_netem_corr qnm_corr; 660 struct rtnl_netem_reo qnm_ro; 661 struct rtnl_netem_crpt qnm_crpt; 662 struct rtnl_netem_dist qnm_dist; 663 }; 664 665 struct rtnl_htb_qdisc 666 { 667 uint32_t qh_rate2quantum; 668 uint32_t qh_defcls; 669 uint32_t qh_mask; 670 uint32_t qh_direct_pkts; 671 }; 672 673 struct rtnl_htb_class 674 { 675 uint32_t ch_prio; 676 struct rtnl_ratespec ch_rate; 677 struct rtnl_ratespec ch_ceil; 678 uint32_t ch_rbuffer; 679 uint32_t ch_cbuffer; 680 uint32_t ch_quantum; 681 uint32_t ch_mask; 682 uint32_t ch_level; 683 }; 684 685 struct rtnl_cbq 686 { 687 struct tc_cbq_lssopt cbq_lss; 688 struct tc_ratespec cbq_rate; 689 struct tc_cbq_wrropt cbq_wrr; 690 struct tc_cbq_ovl cbq_ovl; 691 struct tc_cbq_fopt cbq_fopt; 692 struct tc_cbq_police cbq_police; 693 }; 694 695 struct rtnl_red 696 { 697 uint32_t qr_limit; 698 uint32_t qr_qth_min; 699 uint32_t qr_qth_max; 700 uint8_t qr_flags; 701 uint8_t qr_wlog; 702 uint8_t qr_plog; 703 uint8_t qr_scell_log; 704 uint32_t qr_mask; 705 }; 706 707 struct rtnl_plug 708 { 709 int action; 710 uint32_t limit; 711 }; 712 713 struct rtnl_fq_codel 714 { 715 int fq_limit; 716 uint32_t fq_target; 717 uint32_t fq_interval; 718 int fq_flows; 719 uint32_t fq_quantum; 720 int fq_ecn; 721 uint32_t fq_mask; 722 }; 723 724 struct flnl_request 725 { 726 NLHDR_COMMON 727 728 struct nl_addr * lr_addr; 729 uint32_t lr_fwmark; 730 uint8_t lr_tos; 731 uint8_t lr_scope; 732 uint8_t lr_table; 733 }; 734 735 736 struct flnl_result 737 { 738 NLHDR_COMMON 739 740 struct flnl_request * fr_req; 741 uint8_t fr_table_id; 742 uint8_t fr_prefixlen; 743 uint8_t fr_nh_sel; 744 uint8_t fr_type; 745 uint8_t fr_scope; 746 uint32_t fr_error; 747 }; 748 749 #define GENL_OP_HAS_POLICY 1 750 #define GENL_OP_HAS_DOIT 2 751 #define GENL_OP_HAS_DUMPIT 4 752 753 struct genl_family_op 754 { 755 uint32_t o_id; 756 uint32_t o_flags; 757 758 struct nl_list_head o_list; 759 }; 760 761 struct genl_family_grp { 762 struct genl_family *family; /* private */ 763 struct nl_list_head list; /* private */ 764 char name[GENL_NAMSIZ]; 765 u_int32_t id; 766 }; 767 768 struct genl_family 769 { 770 NLHDR_COMMON 771 772 uint16_t gf_id; 773 char gf_name[GENL_NAMSIZ]; 774 uint32_t gf_version; 775 uint32_t gf_hdrsize; 776 uint32_t gf_maxattr; 777 778 struct nl_list_head gf_ops; 779 struct nl_list_head gf_mc_grps; 780 }; 781 782 union nfnl_ct_proto 783 { 784 struct { 785 uint16_t src; 786 uint16_t dst; 787 } port; 788 struct { 789 uint16_t id; 790 uint8_t type; 791 uint8_t code; 792 } icmp; 793 }; 794 795 struct nfnl_ct_dir { 796 struct nl_addr * src; 797 struct nl_addr * dst; 798 union nfnl_ct_proto proto; 799 uint64_t packets; 800 uint64_t bytes; 801 }; 802 803 union nfnl_ct_protoinfo { 804 struct { 805 uint8_t state; 806 } tcp; 807 }; 808 809 struct nfnl_ct { 810 NLHDR_COMMON 811 812 uint8_t ct_family; 813 uint8_t ct_proto; 814 union nfnl_ct_protoinfo ct_protoinfo; 815 816 uint32_t ct_status; 817 uint32_t ct_status_mask; 818 uint32_t ct_timeout; 819 uint32_t ct_mark; 820 uint32_t ct_use; 821 uint32_t ct_id; 822 uint16_t ct_zone; 823 824 struct nfnl_ct_dir ct_orig; 825 struct nfnl_ct_dir ct_repl; 826 827 struct nfnl_ct_timestamp ct_tstamp; 828 }; 829 830 union nfnl_exp_protodata { 831 struct { 832 uint16_t src; 833 uint16_t dst; 834 } port; 835 struct { 836 uint16_t id; 837 uint8_t type; 838 uint8_t code; 839 } icmp; 840 }; 841 842 // Allow for different master/expect l4 protocols 843 struct nfnl_exp_proto 844 { 845 uint8_t l4protonum; 846 union nfnl_exp_protodata l4protodata; 847 }; 848 849 struct nfnl_exp_dir { 850 struct nl_addr * src; 851 struct nl_addr * dst; 852 struct nfnl_exp_proto proto; 853 }; 854 855 struct nfnl_exp { 856 NLHDR_COMMON 857 858 uint8_t exp_family; 859 uint32_t exp_timeout; 860 uint32_t exp_id; 861 uint16_t exp_zone; 862 uint32_t exp_class; 863 uint32_t exp_flags; 864 char * exp_helper_name; 865 char * exp_fn; 866 uint8_t exp_nat_dir; 867 868 struct nfnl_exp_dir exp_expect; 869 struct nfnl_exp_dir exp_master; 870 struct nfnl_exp_dir exp_mask; 871 struct nfnl_exp_dir exp_nat; 872 }; 873 874 struct nfnl_log { 875 NLHDR_COMMON 876 877 uint16_t log_group; 878 uint8_t log_copy_mode; 879 uint32_t log_copy_range; 880 uint32_t log_flush_timeout; 881 uint32_t log_alloc_size; 882 uint32_t log_queue_threshold; 883 uint32_t log_flags; 884 uint32_t log_flag_mask; 885 }; 886 887 struct nfnl_log_msg { 888 NLHDR_COMMON 889 890 uint8_t log_msg_family; 891 uint8_t log_msg_hook; 892 uint16_t log_msg_hwproto; 893 uint32_t log_msg_mark; 894 struct timeval log_msg_timestamp; 895 uint32_t log_msg_indev; 896 uint32_t log_msg_outdev; 897 uint32_t log_msg_physindev; 898 uint32_t log_msg_physoutdev; 899 uint8_t log_msg_hwaddr[8]; 900 int log_msg_hwaddr_len; 901 void * log_msg_payload; 902 int log_msg_payload_len; 903 char * log_msg_prefix; 904 uint32_t log_msg_uid; 905 uint32_t log_msg_gid; 906 uint32_t log_msg_seq; 907 uint32_t log_msg_seq_global; 908 }; 909 910 struct nfnl_queue { 911 NLHDR_COMMON 912 913 uint16_t queue_group; 914 uint32_t queue_maxlen; 915 uint32_t queue_copy_range; 916 uint8_t queue_copy_mode; 917 }; 918 919 struct nfnl_queue_msg { 920 NLHDR_COMMON 921 922 uint16_t queue_msg_group; 923 uint8_t queue_msg_family; 924 uint8_t queue_msg_hook; 925 uint16_t queue_msg_hwproto; 926 uint32_t queue_msg_packetid; 927 uint32_t queue_msg_mark; 928 struct timeval queue_msg_timestamp; 929 uint32_t queue_msg_indev; 930 uint32_t queue_msg_outdev; 931 uint32_t queue_msg_physindev; 932 uint32_t queue_msg_physoutdev; 933 uint8_t queue_msg_hwaddr[8]; 934 int queue_msg_hwaddr_len; 935 void * queue_msg_payload; 936 int queue_msg_payload_len; 937 uint32_t queue_msg_verdict; 938 }; 939 940 struct ematch_quoted { 941 char * data; 942 size_t len; 943 int index; 944 }; 945 946 struct idiagnl_meminfo { 947 NLHDR_COMMON 948 949 uint32_t idiag_rmem; 950 uint32_t idiag_wmem; 951 uint32_t idiag_fmem; 952 uint32_t idiag_tmem; 953 }; 954 955 struct idiagnl_vegasinfo { 956 NLHDR_COMMON 957 958 uint32_t tcpv_enabled; 959 uint32_t tcpv_rttcnt; 960 uint32_t tcpv_rtt; 961 uint32_t tcpv_minrtt; 962 }; 963 964 struct idiagnl_msg { 965 NLHDR_COMMON 966 967 uint8_t idiag_family; 968 uint8_t idiag_state; 969 uint8_t idiag_timer; 970 uint8_t idiag_retrans; 971 uint16_t idiag_sport; 972 uint16_t idiag_dport; 973 struct nl_addr * idiag_src; 974 struct nl_addr * idiag_dst; 975 uint32_t idiag_ifindex; 976 uint32_t idiag_expires; 977 uint32_t idiag_rqueue; 978 uint32_t idiag_wqueue; 979 uint32_t idiag_uid; 980 uint32_t idiag_inode; 981 982 uint8_t idiag_tos; 983 uint8_t idiag_tclass; 984 uint8_t idiag_shutdown; 985 char * idiag_cong; 986 struct idiagnl_meminfo * idiag_meminfo; 987 struct idiagnl_vegasinfo * idiag_vegasinfo; 988 struct tcp_info idiag_tcpinfo; 989 uint32_t idiag_skmeminfo[IDIAG_SK_MEMINFO_VARS]; 990 }; 991 992 struct idiagnl_req { 993 NLHDR_COMMON 994 995 uint8_t idiag_family; 996 uint8_t idiag_ext; 997 struct nl_addr * idiag_src; 998 struct nl_addr * idiag_dst; 999 uint32_t idiag_ifindex; 1000 uint32_t idiag_states; 1001 uint32_t idiag_dbs; 1002 }; 1003 #endif 1004