This commit was generated by cvs2svn to compensate for changes in r786,
[libnl.git] / include / netlink-types.h
diff --git a/include/netlink-types.h b/include/netlink-types.h
new file mode 100644 (file)
index 0000000..3984026
--- /dev/null
@@ -0,0 +1,710 @@
+/*
+ * netlink-types.h     Netlink Types (Private)
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_LOCAL_TYPES_H_
+#define NETLINK_LOCAL_TYPES_H_
+
+#include <netlink/list.h>
+#include <netlink/route/link.h>
+#include <netlink/route/qdisc.h>
+#include <netlink/route/rtnl.h>
+
+struct nl_cache_ops;
+
+#define NL_SOCK_BUFSIZE_SET 1
+#define NL_SOCK_PASSCRED 2
+
+#define NL_MSG_CRED_PRESENT 1
+
+struct nl_handle;
+struct nl_object;
+
+struct nl_cb
+{
+       nl_recvmsg_msg_cb_t     cb_set[NL_CB_TYPE_MAX+1];
+       void *                  cb_args[NL_CB_TYPE_MAX+1];
+       
+       nl_recvmsg_err_cb_t     cb_err;
+       void *                  cb_err_arg;
+
+       /** May be used to replace nl_recvmsgs with your own implementation
+        * in all internal calls to nl_recvmsgs. */
+       int                     (*cb_recvmsgs_ow)(struct nl_handle *,
+                                                 struct nl_cb *);
+
+       /** Overwrite internal calls to nl_recv, must return the number of
+        * octets read and allocate a buffer for the received data. */
+       int                     (*cb_recv_ow)(struct nl_handle *,
+                                             struct sockaddr_nl *,
+                                             unsigned char **,
+                                             struct ucred **);
+
+       /** Overwrites internal calls to nl_send, must send the netlink
+        * message. */
+       int                     (*cb_send_ow)(struct nl_handle *,
+                                             struct nl_msg *);
+};
+
+struct nl_handle
+{
+       struct sockaddr_nl      h_local;
+       struct sockaddr_nl      h_peer;
+       int                     h_fd;
+       int                     h_proto;
+       unsigned int            h_seq_next;
+       unsigned int            h_seq_expect;
+       int                     h_flags;
+       struct nl_cb *          h_cb;
+};
+
+struct nl_cache
+{
+       struct nl_list_head     c_items;
+       int                     c_nitems;
+       int                     c_iarg1;
+       int                     c_iarg2;
+       struct nl_cache_ops *   c_ops;
+};
+
+struct nl_parser_param;
+
+struct nl_msgtype
+{
+       int                     mt_id;
+       char *                  mt_name;
+};
+
+struct nl_cache_ops
+{
+       char  *                 co_name;
+       size_t                  co_size;
+       int                     co_hdrsize;
+       int                     co_protocol;
+       
+       /**
+        * Called whenever an update of the cache is required. Must send
+        * a request message to the kernel requesting a complete dump.
+        */
+       int   (*co_request_update)(struct nl_cache *, struct nl_handle *);
+
+       /**
+        * Called whenever a new object was allocated
+        */
+       void  (*co_constructor)(struct nl_object *);
+
+       /**
+        * Called whenever a object in the cache gets destroyed, must
+        * free the type specific memory allocations
+        */
+       void  (*co_free_data)(struct nl_object *);
+
+       /**
+        * Called whenever a message was received that needs to be parsed.
+        * Must parse the message and call the paser callback function
+        * (nl_parser_param) provided via the argument.
+        */
+       int   (*co_msg_parser)(struct sockaddr_nl *, struct nlmsghdr *, void *);
+
+       /**
+        * Called whenever a dump of a cache object is requested. Must
+        * dump the specified object to the specified file descriptor
+        */
+       int   (*co_dump[NL_DUMP_MAX+1])(struct nl_object *,
+                                       struct nl_dump_params *);
+
+       /**
+        * Must compare the two specified objects and return a non-zero
+        * value if they match.
+        */
+       int   (*co_filter)(struct nl_object *, struct nl_object *);
+
+
+       struct nl_cache_ops *co_next;
+       struct nl_cache *co_major_cache;
+       struct nl_msgtype       co_msgtypes[];
+};
+
+#define NLHDR_COMMON                           \
+       int                     ce_refcnt;      \
+       struct nl_cache_ops *   ce_ops;         \
+       struct nl_cache *       ce_cache;       \
+       struct nl_object *      ce_dataref;     \
+       struct nl_list_head     ce_list;        \
+       int                     ce_msgtype;
+
+struct nl_object
+{
+       NLHDR_COMMON
+};
+
+struct nl_parser_param
+{
+       int             (*pp_cb)(struct nl_object *, struct nl_parser_param *);
+       void *            pp_arg;
+};
+
+struct nl_data
+{
+       size_t                  d_size;
+       void *                  d_data;
+};
+
+struct nl_addr
+{
+       int                     a_family;
+       unsigned int            a_maxsize;
+       unsigned int            a_len;
+       int                     a_prefixlen;
+       int                     a_refcnt;
+       unsigned char           a_addr[0];
+};
+
+struct nl_msg
+{
+       int                     nm_protocol;
+       int                     nm_flags;
+       struct sockaddr_nl      nm_src;
+       struct sockaddr_nl      nm_dst;
+       struct ucred            nm_creds;
+       struct nlmsghdr *       nm_nlh;
+};
+
+struct rtnl_link_map
+{
+       uint64_t lm_mem_start;
+       uint64_t lm_mem_end;
+       uint64_t lm_base_addr;
+       uint16_t lm_irq;
+       uint8_t  lm_dma;
+       uint8_t  lm_port;
+};
+
+#define IFQDISCSIZ     32
+
+struct rtnl_link
+{
+       NLHDR_COMMON
+
+       char            l_name[IFNAMSIZ];
+
+       uint32_t        l_family;
+       uint32_t        l_arptype;
+       uint32_t        l_index;
+       uint32_t        l_flags;
+       uint32_t        l_change;
+       uint32_t        l_mtu;
+       uint32_t        l_link;
+       uint32_t        l_txqlen;
+       uint32_t        l_weight;
+       uint32_t        l_master;
+       struct nl_addr *l_addr; 
+       struct nl_addr *l_bcast;
+       char            l_qdisc[IFQDISCSIZ];
+       struct rtnl_link_map l_map;
+       uint64_t        l_stats[RTNL_LINK_STATS_MAX+1];
+       uint32_t        l_mask; 
+       uint32_t        l_flag_mask;
+};
+
+struct rtnl_ncacheinfo
+{
+       uint32_t nci_confirmed; /**< Time since neighbour validty was last confirmed */
+       uint32_t nci_used;      /**< Time since neighbour entry was last ued */
+       uint32_t nci_updated;   /**< Time since last update */
+       uint32_t nci_refcnt;    /**< Reference counter */
+};
+
+
+struct rtnl_neigh
+{
+       NLHDR_COMMON
+       uint32_t        n_family;
+       uint32_t        n_ifindex;
+       uint16_t        n_state;
+       uint8_t         n_flags;
+       uint8_t         n_type; 
+       struct nl_addr *n_lladdr;
+       struct nl_addr *n_dst;  
+       uint32_t        n_probes;
+       struct rtnl_ncacheinfo n_cacheinfo;
+       uint32_t                n_mask;
+       uint32_t                n_state_mask;
+       uint32_t                n_flag_mask;
+};
+
+
+struct rtnl_addr_cacheinfo
+{
+       /* Preferred lifetime in seconds */
+       uint32_t aci_prefered;
+
+       /* Valid lifetime in seconds */
+       uint32_t aci_valid;
+
+       /* Timestamp of creation in 1/100s seince boottime */
+       uint32_t aci_cstamp;
+
+       /* Timestamp of last update in 1/100s since boottime */
+       uint32_t aci_tstamp;
+};
+
+struct rtnl_addr
+{
+       NLHDR_COMMON
+
+       uint8_t         a_family;
+       uint8_t         a_prefixlen;
+       uint8_t         a_flags;
+       uint8_t         a_scope;
+       uint32_t        a_ifindex;
+
+       struct nl_addr *a_peer; 
+       struct nl_addr *a_local;
+       struct nl_addr *a_bcast;
+       struct nl_addr *a_anycast;
+       struct nl_addr *a_multicast;
+
+       struct rtnl_addr_cacheinfo a_cacheinfo;
+       
+       char a_label[IFNAMSIZ];
+       uint32_t a_mask;
+       uint32_t a_flag_mask;
+};
+
+struct rtnl_nexthop
+{
+       uint8_t                 rtnh_flags;
+       uint8_t                 rtnh_flag_mask;
+       uint8_t                 rtnh_weight;
+       /* 1 byte spare */
+       uint32_t                rtnh_ifindex;
+       struct nl_addr *        rtnh_gateway;
+       uint32_t                rtnh_mask;
+
+       struct nl_list_head     rtnh_list;
+};
+
+struct rtnl_rtcacheinfo
+{
+       uint32_t        rtci_clntref;
+       uint32_t        rtci_last_use;
+       uint32_t        rtci_expires;
+       int32_t         rtci_error;
+       uint32_t        rtci_used;
+       uint32_t        rtci_id;
+       uint32_t        rtci_ts;
+       uint32_t        rtci_tsage;
+};
+
+struct rtnl_route
+{
+       NLHDR_COMMON
+
+       uint8_t                 rt_family;
+       uint8_t                 rt_dst_len;
+       uint8_t                 rt_src_len;
+       uint8_t                 rt_tos;
+       uint8_t                 rt_table;
+       uint8_t                 rt_protocol;
+       uint8_t                 rt_scope;
+       uint8_t                 rt_type;
+       uint32_t                rt_flags;
+       struct nl_addr *        rt_dst;
+       struct nl_addr *        rt_src;
+       char                    rt_iif[IFNAMSIZ];
+       uint32_t                rt_oif;
+       struct nl_addr *        rt_gateway;
+       uint32_t                rt_prio;
+       uint32_t                rt_metrics[RTAX_MAX];
+       uint32_t                rt_metrics_mask;
+       struct nl_addr *        rt_pref_src;
+       struct nl_list_head     rt_nexthops;
+       realm_t                 rt_realms;
+       struct rtnl_rtcacheinfo rt_cacheinfo;
+       uint32_t                rt_mp_algo;
+       uint32_t                rt_flag_mask;
+       uint32_t                rt_mask;
+};
+
+struct rtnl_rule
+{
+       NLHDR_COMMON
+
+       uint64_t        r_fwmark;
+       uint32_t        r_prio;
+       uint32_t        r_realms;
+       uint32_t        r_table;
+       uint8_t         r_dsfield;
+       uint8_t         r_type;
+       uint8_t         r_family;
+       uint8_t         r_src_len;
+       uint8_t         r_dst_len;
+       char            r_iif[IFNAMSIZ];
+       struct nl_addr *r_src;
+       struct nl_addr *r_dst;
+       struct nl_addr *r_srcmap;
+
+       uint32_t        r_mask; 
+};
+
+struct rtnl_neightbl_parms
+{
+       /**
+        * Interface index of the device this parameter set is assigned
+        * to or 0 for the default set.
+        */
+       uint32_t                ntp_ifindex;
+
+       /**
+        * Number of references to this parameter set.
+        */
+       uint32_t                ntp_refcnt;
+
+       /**
+        * Queue length for pending arp requests, i.e. the number of
+        * packets which are accepted from other layers while the
+        * neighbour address is still being resolved
+        */
+       uint32_t                ntp_queue_len;
+
+       /**
+        * Number of requests to send to the user level ARP daemon.
+        * Specify 0 to disable.
+        */
+       uint32_t                ntp_app_probes;
+
+       /**
+        * Maximum number of retries for unicast solicitation.
+        */
+       uint32_t                ntp_ucast_probes;
+
+       /**
+        * Maximum number of retries for multicast solicitation.
+        */
+       uint32_t                ntp_mcast_probes;
+
+       /**
+        * Base value in milliseconds to ompute reachable time, see RFC2461.
+        */
+       uint64_t                ntp_base_reachable_time;
+
+       /**
+        * Actual reachable time (read-only)
+        */
+       uint64_t                ntp_reachable_time;     /* secs */
+
+       /**
+        * The time in milliseconds between retransmitted Neighbor
+        * Solicitation messages.
+        */
+       uint64_t                ntp_retrans_time;
+
+       /**
+        * Interval in milliseconds to check for stale neighbour
+        * entries.
+        */
+       uint64_t                ntp_gc_stale_time;      /* secs */
+
+       /**
+        * Delay in milliseconds for the first time probe if
+        * the neighbour is reachable.
+        */
+       uint64_t                ntp_probe_delay;        /* secs */
+
+       /**
+        * Maximum delay in milliseconds of an answer to a neighbour
+        * solicitation message.
+        */
+       uint64_t                ntp_anycast_delay;
+
+       /**
+        * Minimum age in milliseconds before a neighbour entry
+        * may be replaced.
+        */
+       uint64_t                ntp_locktime;
+
+       /**
+        * Delay in milliseconds before answering to an ARP request
+        * for which a proxy ARP entry exists.
+        */
+       uint64_t                ntp_proxy_delay;
+
+       /**
+        * Queue length for the delayed proxy arp requests.
+        */
+       uint32_t                ntp_proxy_qlen;
+       
+       /**
+        * Mask of available parameter attributes
+        */
+       uint32_t                ntp_mask;
+};
+
+#define NTBLNAMSIZ     32
+
+/**
+ * Neighbour table
+ * @ingroup neightbl
+ */
+struct rtnl_neightbl
+{
+       NLHDR_COMMON
+
+       char                    nt_name[NTBLNAMSIZ];
+       uint32_t                nt_family;
+       uint32_t                nt_gc_thresh1;
+       uint32_t                nt_gc_thresh2;
+       uint32_t                nt_gc_thresh3;
+       uint64_t                nt_gc_interval;
+       struct ndt_config       nt_config;
+       struct rtnl_neightbl_parms nt_parms;
+       struct ndt_stats        nt_stats;
+       uint32_t                nt_mask;
+};
+
+struct rtnl_ratespec
+{
+       uint8_t                 rs_cell_log;
+       uint16_t                rs_feature;
+       uint16_t                rs_addend;
+       uint16_t                rs_mpu;
+       uint32_t                rs_rate;
+};
+
+struct rtnl_tstats
+{
+       struct {
+               uint64_t            bytes;
+               uint64_t            packets;
+       } tcs_basic;
+
+       struct {
+               uint32_t            bps;
+               uint32_t            pps;
+       } tcs_rate_est;
+
+       struct {
+               uint32_t            qlen;
+               uint32_t            backlog;
+               uint32_t            drops;
+               uint32_t            requeues;
+               uint32_t            overlimits;
+       } tcs_queue;
+};
+
+#define TCKINDSIZ      32
+
+#define NL_TCA_GENERIC(pre)                            \
+       NLHDR_COMMON                                    \
+       uint32_t                pre ##_family;          \
+       uint32_t                pre ##_ifindex;         \
+       uint32_t                pre ##_handle;          \
+       uint32_t                pre ##_parent;          \
+       uint32_t                pre ##_info;            \
+       char                    pre ##_kind[TCKINDSIZ]; \
+       struct nl_data *        pre ##_opts;            \
+       uint64_t                pre ##_stats[RTNL_TC_STATS_MAX+1]; \
+       struct nl_data *        pre ##_xstats;          \
+       void *                  pre ##_subdata;         \
+       int                     pre ##_mask
+
+
+struct rtnl_tca
+{
+       NL_TCA_GENERIC(tc);
+};
+
+struct rtnl_qdisc
+{
+       NL_TCA_GENERIC(q);
+       struct rtnl_qdisc_ops   *q_ops;
+};
+
+struct rtnl_class
+{
+       NL_TCA_GENERIC(c);
+       struct rtnl_class_ops   *c_ops;
+};
+
+struct rtnl_cls
+{
+       NL_TCA_GENERIC(c);
+       uint32_t        c_prio;
+       uint32_t        c_protocol;
+       struct rtnl_cls_ops     *c_ops;
+};
+
+struct rtnl_u32
+{
+       uint32_t                cu_divisor;
+       uint32_t                cu_hash;
+       uint32_t                cu_classid;
+       uint32_t                cu_link;
+       struct nl_data *        cu_pcnt;
+       struct nl_data *        cu_selector;
+       struct nl_data *        cu_act;
+       struct nl_data *        cu_police;
+       char                    cu_indev[IFNAMSIZ];
+       int                     cu_mask;
+};
+
+struct rtnl_fw
+{
+       uint32_t                cf_classid;
+       struct nl_data *        cf_act;
+       struct nl_data *        cf_police;
+       char                    cf_indev[IFNAMSIZ];
+       int                     cf_mask;
+};
+
+struct rtnl_dsmark_qdisc
+{
+       uint16_t        qdm_indices;
+       uint16_t        qdm_default_index;
+       uint32_t        qdm_set_tc_index;
+       uint32_t        qdm_mask;
+};
+
+struct rtnl_dsmark_class
+{
+       uint8_t         cdm_bmask;
+       uint8_t         cdm_value;
+       uint32_t        cdm_mask;
+};
+
+struct rtnl_fifo
+{
+       uint32_t        qf_limit;
+       uint32_t        qf_mask;
+};
+
+struct rtnl_prio
+{
+       uint32_t        qp_bands;
+       uint8_t         qp_priomap[TC_PRIO_MAX+1];
+       uint32_t        qp_mask;
+};
+
+struct rtnl_tbf
+{
+       uint32_t                qt_limit;
+       uint32_t                qt_mpu;
+       struct rtnl_ratespec    qt_rate;
+       uint32_t                qt_rate_bucket;
+       uint32_t                qt_rate_txtime;
+       struct rtnl_ratespec    qt_peakrate;
+       uint32_t                qt_peakrate_bucket;
+       uint32_t                qt_peakrate_txtime;
+       uint32_t                qt_mask;
+};
+
+struct rtnl_sfq
+{
+       uint32_t        qs_quantum;
+       uint32_t        qs_perturb;
+       uint32_t        qs_limit;
+       uint32_t        qs_divisor;
+       uint32_t        qs_flows;
+       uint32_t        qs_mask;
+};
+
+struct rtnl_netem_corr
+{
+       uint32_t        nmc_delay;
+       uint32_t        nmc_loss;
+       uint32_t        nmc_duplicate;
+};
+
+struct rtnl_netem_reo
+{
+       uint32_t        nmro_probability;
+       uint32_t        nmro_correlation;
+};
+
+struct rtnl_netem
+{
+       uint32_t                qnm_latency;
+       uint32_t                qnm_limit;
+       uint32_t                qnm_loss;
+       uint32_t                qnm_gap;
+       uint32_t                qnm_duplicate;
+       uint32_t                qnm_jitter;
+       uint32_t                qnm_mask;
+       struct rtnl_netem_corr  qnm_corr;
+       struct rtnl_netem_reo   qnm_ro;
+};
+
+struct rtnl_htb_qdisc
+{
+       uint32_t                qh_rate2quantum;
+       uint32_t                qh_defcls;
+       uint32_t                qh_mask;
+};
+
+struct rtnl_htb_class
+{
+       uint32_t                ch_prio;
+       uint32_t                ch_mtu;
+       struct rtnl_ratespec    ch_rate;
+       struct rtnl_ratespec    ch_ceil;
+       uint32_t                ch_rbuffer;
+       uint32_t                ch_cbuffer;
+       uint32_t                ch_mask;
+};
+
+struct rtnl_cbq
+{
+       struct tc_cbq_lssopt    cbq_lss;
+       struct tc_ratespec      cbq_rate;
+       struct tc_cbq_wrropt    cbq_wrr;
+       struct tc_cbq_ovl       cbq_ovl;
+       struct tc_cbq_fopt      cbq_fopt;
+       struct tc_cbq_police    cbq_police;
+};
+
+struct rtnl_red
+{
+       uint32_t        qr_limit;
+       uint32_t        qr_qth_min;
+       uint32_t        qr_qth_max;
+       uint8_t         qr_flags;
+       uint8_t         qr_wlog;
+       uint8_t         qr_plog;
+       uint8_t         qr_scell_log;
+       uint32_t        qr_mask;
+};
+
+struct flnl_request
+{
+       struct nl_addr *        lr_addr;
+       uint32_t                lr_fwmark;
+       uint8_t                 lr_tos;
+       uint8_t                 lr_scope;
+       uint8_t                 lr_table;
+       uint32_t                lr_mask;
+       int                     lr_refcnt;
+};
+
+
+struct flnl_result
+{
+       NLHDR_COMMON
+
+       struct flnl_request *   fr_req;
+       uint8_t                 fr_table_id;
+       uint8_t                 fr_prefixlen;
+       uint8_t                 fr_nh_sel;
+       uint8_t                 fr_type;
+       uint8_t                 fr_scope;
+       uint32_t                fr_error;
+};
+
+#endif