Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iproute2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
iproute2
Commits
0633baa1
Commit
0633baa1
authored
Aug 04, 2004
by
osdl.net!shemminger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Logical change 1.61)
parent
28dfef0b
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1339 additions
and
0 deletions
+1339
-0
include/linux/netlink.h
include/linux/netlink.h
+100
-0
include/linux/pkt_sched.h
include/linux/pkt_sched.h
+414
-0
include/linux/rtnetlink.h
include/linux/rtnetlink.h
+698
-0
include/linux/tcp_diag.h
include/linux/tcp_diag.h
+127
-0
No files found.
include/linux/netlink.h
View file @
0633baa1
#ifndef __LINUX_NETLINK_H
#define __LINUX_NETLINK_H
#include <linux/socket.h>
/* for sa_family_t */
#include <linux/types.h>
#define NETLINK_ROUTE 0
/* Routing/device hook */
#define NETLINK_SKIP 1
/* Reserved for ENskip */
#define NETLINK_USERSOCK 2
/* Reserved for user mode socket protocols */
#define NETLINK_FIREWALL 3
/* Firewalling hook */
#define NETLINK_TCPDIAG 4
/* TCP socket monitoring */
#define NETLINK_NFLOG 5
/* netfilter/iptables ULOG */
#define NETLINK_XFRM 6
/* ipsec */
#define NETLINK_SELINUX 7
/* SELinux event notifications */
#define NETLINK_ARPD 8
#define NETLINK_AUDIT 9
/* auditing */
#define NETLINK_ROUTE6 11
/* af_inet6 route comm channel */
#define NETLINK_IP6_FW 13
#define NETLINK_DNRTMSG 14
/* DECnet routing messages */
#define NETLINK_TAPBASE 16
/* 16 to 31 are ethertap */
#define MAX_LINKS 32
struct
sockaddr_nl
{
sa_family_t
nl_family
;
/* AF_NETLINK */
unsigned
short
nl_pad
;
/* zero */
__u32
nl_pid
;
/* process pid */
__u32
nl_groups
;
/* multicast groups mask */
};
struct
nlmsghdr
{
__u32
nlmsg_len
;
/* Length of message including header */
__u16
nlmsg_type
;
/* Message content */
__u16
nlmsg_flags
;
/* Additional flags */
__u32
nlmsg_seq
;
/* Sequence number */
__u32
nlmsg_pid
;
/* Sending process PID */
};
/* Flags values */
#define NLM_F_REQUEST 1
/* It is request message. */
#define NLM_F_MULTI 2
/* Multipart message, terminated by NLMSG_DONE */
#define NLM_F_ACK 4
/* Reply with ack, with zero or error code */
#define NLM_F_ECHO 8
/* Echo this request */
/* Modifiers to GET request */
#define NLM_F_ROOT 0x100
/* specify tree root */
#define NLM_F_MATCH 0x200
/* return all matching */
#define NLM_F_ATOMIC 0x400
/* atomic GET */
#define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH)
/* Modifiers to NEW request */
#define NLM_F_REPLACE 0x100
/* Override existing */
#define NLM_F_EXCL 0x200
/* Do not touch, if it exists */
#define NLM_F_CREATE 0x400
/* Create, if it does not exist */
#define NLM_F_APPEND 0x800
/* Add to end of list */
/*
4.4BSD ADD NLM_F_CREATE|NLM_F_EXCL
4.4BSD CHANGE NLM_F_REPLACE
True CHANGE NLM_F_CREATE|NLM_F_REPLACE
Append NLM_F_CREATE
Check NLM_F_EXCL
*/
#define NLMSG_ALIGNTO 4
#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr)))
#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
#define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
(struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len <= (len))
#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
#define NLMSG_NOOP 0x1
/* Nothing. */
#define NLMSG_ERROR 0x2
/* Error */
#define NLMSG_DONE 0x3
/* End of a dump */
#define NLMSG_OVERRUN 0x4
/* Data lost */
struct
nlmsgerr
{
int
error
;
struct
nlmsghdr
msg
;
};
#define NET_MAJOR 36
/* Major 36 is reserved for networking */
enum
{
NETLINK_UNCONNECTED
=
0
,
NETLINK_CONNECTED
,
};
#endif
/* __LINUX_NETLINK_H */
include/linux/pkt_sched.h
View file @
0633baa1
#ifndef __LINUX_PKT_SCHED_H
#define __LINUX_PKT_SCHED_H
/* Logical priority bands not depending on specific packet scheduler.
Every scheduler will map them to real traffic classes, if it has
no more precise mechanism to classify packets.
These numbers have no special meaning, though their coincidence
with obsolete IPv6 values is not occasional :-). New IPv6 drafts
preferred full anarchy inspired by diffserv group.
Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
class, actually, as rule it will be handled with more care than
filler or even bulk.
*/
#define TC_PRIO_BESTEFFORT 0
#define TC_PRIO_FILLER 1
#define TC_PRIO_BULK 2
#define TC_PRIO_INTERACTIVE_BULK 4
#define TC_PRIO_INTERACTIVE 6
#define TC_PRIO_CONTROL 7
#define TC_PRIO_MAX 15
/* Generic queue statistics, available for all the elements.
Particular schedulers may have also their private records.
*/
struct
tc_stats
{
__u64
bytes
;
/* NUmber of enqueues bytes */
__u32
packets
;
/* Number of enqueued packets */
__u32
drops
;
/* Packets dropped because of lack of resources */
__u32
overlimits
;
/* Number of throttle events when this
* flow goes out of allocated bandwidth */
__u32
bps
;
/* Current flow byte rate */
__u32
pps
;
/* Current flow packet rate */
__u32
qlen
;
__u32
backlog
;
};
struct
tc_estimator
{
signed
char
interval
;
unsigned
char
ewma_log
;
};
/* "Handles"
---------
All the traffic control objects have 32bit identifiers, or "handles".
They can be considered as opaque numbers from user API viewpoint,
but actually they always consist of two fields: major and
minor numbers, which are interpreted by kernel specially,
that may be used by applications, though not recommended.
F.e. qdisc handles always have minor number equal to zero,
classes (or flows) have major equal to parent qdisc major, and
minor uniquely identifying class inside qdisc.
Macros to manipulate handles:
*/
#define TC_H_MAJ_MASK (0xFFFF0000U)
#define TC_H_MIN_MASK (0x0000FFFFU)
#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
#define TC_H_UNSPEC (0U)
#define TC_H_ROOT (0xFFFFFFFFU)
#define TC_H_INGRESS (0xFFFFFFF1U)
struct
tc_ratespec
{
unsigned
char
cell_log
;
unsigned
char
__reserved
;
unsigned
short
feature
;
short
addend
;
unsigned
short
mpu
;
__u32
rate
;
};
/* FIFO section */
struct
tc_fifo_qopt
{
__u32
limit
;
/* Queue length: bytes for bfifo, packets for pfifo */
};
/* PRIO section */
#define TCQ_PRIO_BANDS 16
struct
tc_prio_qopt
{
int
bands
;
/* Number of bands */
__u8
priomap
[
TC_PRIO_MAX
+
1
];
/* Map: logical priority -> PRIO band */
};
/* TBF section */
struct
tc_tbf_qopt
{
struct
tc_ratespec
rate
;
struct
tc_ratespec
peakrate
;
__u32
limit
;
__u32
buffer
;
__u32
mtu
;
};
enum
{
TCA_TBF_UNSPEC
,
TCA_TBF_PARMS
,
TCA_TBF_RTAB
,
TCA_TBF_PTAB
,
};
/* TEQL section */
/* TEQL does not require any parameters */
/* SFQ section */
struct
tc_sfq_qopt
{
unsigned
quantum
;
/* Bytes per round allocated to flow */
int
perturb_period
;
/* Period of hash perturbation */
__u32
limit
;
/* Maximal packets in queue */
unsigned
divisor
;
/* Hash divisor */
unsigned
flows
;
/* Maximal number of flows */
};
/*
* NOTE: limit, divisor and flows are hardwired to code at the moment.
*
* limit=flows=128, divisor=1024;
*
* The only reason for this is efficiency, it is possible
* to change these parameters in compile time.
*/
/* RED section */
enum
{
TCA_RED_UNSPEC
,
TCA_RED_PARMS
,
TCA_RED_STAB
,
};
struct
tc_red_qopt
{
__u32
limit
;
/* HARD maximal queue length (bytes) */
__u32
qth_min
;
/* Min average length threshold (bytes) */
__u32
qth_max
;
/* Max average length threshold (bytes) */
unsigned
char
Wlog
;
/* log(W) */
unsigned
char
Plog
;
/* log(P_max/(qth_max-qth_min)) */
unsigned
char
Scell_log
;
/* cell size for idle damping */
unsigned
char
flags
;
#define TC_RED_ECN 1
};
struct
tc_red_xstats
{
__u32
early
;
/* Early drops */
__u32
pdrop
;
/* Drops due to queue limits */
__u32
other
;
/* Drops due to drop() calls */
__u32
marked
;
/* Marked packets */
};
/* GRED section */
#define MAX_DPs 16
enum
{
TCA_GRED_UNSPEC
,
TCA_GRED_PARMS
,
TCA_GRED_STAB
,
TCA_GRED_DPS
,
};
#define TCA_SET_OFF TCA_GRED_PARMS
struct
tc_gred_qopt
{
__u32
limit
;
/* HARD maximal queue length (bytes)
*/
__u32
qth_min
;
/* Min average length threshold (bytes)
*/
__u32
qth_max
;
/* Max average length threshold (bytes)
*/
__u32
DP
;
/* upto 2^32 DPs */
__u32
backlog
;
__u32
qave
;
__u32
forced
;
__u32
early
;
__u32
other
;
__u32
pdrop
;
unsigned
char
Wlog
;
/* log(W) */
unsigned
char
Plog
;
/* log(P_max/(qth_max-qth_min)) */
unsigned
char
Scell_log
;
/* cell size for idle damping */
__u8
prio
;
/* prio of this VQ */
__u32
packets
;
__u32
bytesin
;
};
/* gred setup */
struct
tc_gred_sopt
{
__u32
DPs
;
__u32
def_DP
;
__u8
grio
;
};
/* HTB section */
#define TC_HTB_NUMPRIO 8
#define TC_HTB_MAXDEPTH 8
#define TC_HTB_PROTOVER 3
/* the same as HTB and TC's major */
struct
tc_htb_opt
{
struct
tc_ratespec
rate
;
struct
tc_ratespec
ceil
;
__u32
buffer
;
__u32
cbuffer
;
__u32
quantum
;
__u32
level
;
/* out only */
__u32
prio
;
};
struct
tc_htb_glob
{
__u32
version
;
/* to match HTB/TC */
__u32
rate2quantum
;
/* bps->quantum divisor */
__u32
defcls
;
/* default class number */
__u32
debug
;
/* debug flags */
/* stats */
__u32
direct_pkts
;
/* count of non shapped packets */
};
enum
{
TCA_HTB_UNSPEC
,
TCA_HTB_PARMS
,
TCA_HTB_INIT
,
TCA_HTB_CTAB
,
TCA_HTB_RTAB
,
};
struct
tc_htb_xstats
{
__u32
lends
;
__u32
borrows
;
__u32
giants
;
/* too big packets (rate will not be accurate) */
__u32
tokens
;
__u32
ctokens
;
};
/* HFSC section */
struct
tc_hfsc_qopt
{
__u16
defcls
;
/* default class */
};
struct
tc_service_curve
{
__u32
m1
;
/* slope of the first segment in bps */
__u32
d
;
/* x-projection of the first segment in us */
__u32
m2
;
/* slope of the second segment in bps */
};
struct
tc_hfsc_stats
{
__u64
work
;
/* total work done */
__u64
rtwork
;
/* work done by real-time criteria */
__u32
period
;
/* current period */
__u32
level
;
/* class level in hierarchy */
};
enum
{
TCA_HFSC_UNSPEC
,
TCA_HFSC_RSC
,
TCA_HFSC_FSC
,
TCA_HFSC_USC
,
TCA_HFSC_MAX
=
TCA_HFSC_USC
};
/* CBQ section */
#define TC_CBQ_MAXPRIO 8
#define TC_CBQ_MAXLEVEL 8
#define TC_CBQ_DEF_EWMA 5
struct
tc_cbq_lssopt
{
unsigned
char
change
;
unsigned
char
flags
;
#define TCF_CBQ_LSS_BOUNDED 1
#define TCF_CBQ_LSS_ISOLATED 2
unsigned
char
ewma_log
;
unsigned
char
level
;
#define TCF_CBQ_LSS_FLAGS 1
#define TCF_CBQ_LSS_EWMA 2
#define TCF_CBQ_LSS_MAXIDLE 4
#define TCF_CBQ_LSS_MINIDLE 8
#define TCF_CBQ_LSS_OFFTIME 0x10
#define TCF_CBQ_LSS_AVPKT 0x20
__u32
maxidle
;
__u32
minidle
;
__u32
offtime
;
__u32
avpkt
;
};
struct
tc_cbq_wrropt
{
unsigned
char
flags
;
unsigned
char
priority
;
unsigned
char
cpriority
;
unsigned
char
__reserved
;
__u32
allot
;
__u32
weight
;
};
struct
tc_cbq_ovl
{
unsigned
char
strategy
;
#define TC_CBQ_OVL_CLASSIC 0
#define TC_CBQ_OVL_DELAY 1
#define TC_CBQ_OVL_LOWPRIO 2
#define TC_CBQ_OVL_DROP 3
#define TC_CBQ_OVL_RCLASSIC 4
unsigned
char
priority2
;
__u32
penalty
;
};
struct
tc_cbq_police
{
unsigned
char
police
;
unsigned
char
__res1
;
unsigned
short
__res2
;
};
struct
tc_cbq_fopt
{
__u32
split
;
__u32
defmap
;
__u32
defchange
;
};
struct
tc_cbq_xstats
{
__u32
borrows
;
__u32
overactions
;
__s32
avgidle
;
__s32
undertime
;
};
enum
{
TCA_CBQ_UNSPEC
,
TCA_CBQ_LSSOPT
,
TCA_CBQ_WRROPT
,
TCA_CBQ_FOPT
,
TCA_CBQ_OVL_STRATEGY
,
TCA_CBQ_RATE
,
TCA_CBQ_RTAB
,
TCA_CBQ_POLICE
,
};
#define TCA_CBQ_MAX TCA_CBQ_POLICE
/* dsmark section */
enum
{
TCA_DSMARK_UNSPEC
,
TCA_DSMARK_INDICES
,
TCA_DSMARK_DEFAULT_INDEX
,
TCA_DSMARK_SET_TC_INDEX
,
TCA_DSMARK_MASK
,
TCA_DSMARK_VALUE
};
#define TCA_DSMARK_MAX TCA_DSMARK_VALUE
/* ATM section */
enum
{
TCA_ATM_UNSPEC
,
TCA_ATM_FD
,
/* file/socket descriptor */
TCA_ATM_PTR
,
/* pointer to descriptor - later */
TCA_ATM_HDR
,
/* LL header */
TCA_ATM_EXCESS
,
/* excess traffic class (0 for CLP) */
TCA_ATM_ADDR
,
/* PVC address (for output only) */
TCA_ATM_STATE
/* VC state (ATM_VS_*; for output only) */
};
#define TCA_ATM_MAX TCA_ATM_STATE
/* Network emulator */
struct
tc_netem_qopt
{
__u32
latency
;
/* added delay (us) */
__u32
limit
;
/* fifo limit (packets) */
__u32
loss
;
/* random packet loss (0=none ~0=100%) */
__u32
gap
;
/* re-ordering gap (0 for delay all) */
__u32
duplicate
;
/* random packet dup (0=none ~0=100%) */
__u32
jitter
;
/* random jitter in latency (us) */
};
#endif
include/linux/rtnetlink.h
View file @
0633baa1
#ifndef __LINUX_RTNETLINK_H
#define __LINUX_RTNETLINK_H
#include <linux/netlink.h>
/****
* Routing/neighbour discovery messages.
****/
/* Types of messages */
#define RTM_BASE 0x10
#define RTM_NEWLINK (RTM_BASE+0)
#define RTM_DELLINK (RTM_BASE+1)
#define RTM_GETLINK (RTM_BASE+2)
#define RTM_SETLINK (RTM_BASE+3)
#define RTM_NEWADDR (RTM_BASE+4)
#define RTM_DELADDR (RTM_BASE+5)
#define RTM_GETADDR (RTM_BASE+6)
#define RTM_NEWROUTE (RTM_BASE+8)
#define RTM_DELROUTE (RTM_BASE+9)
#define RTM_GETROUTE (RTM_BASE+10)
#define RTM_NEWNEIGH (RTM_BASE+12)
#define RTM_DELNEIGH (RTM_BASE+13)
#define RTM_GETNEIGH (RTM_BASE+14)
#define RTM_NEWRULE (RTM_BASE+16)
#define RTM_DELRULE (RTM_BASE+17)
#define RTM_GETRULE (RTM_BASE+18)
#define RTM_NEWQDISC (RTM_BASE+20)
#define RTM_DELQDISC (RTM_BASE+21)
#define RTM_GETQDISC (RTM_BASE+22)
#define RTM_NEWTCLASS (RTM_BASE+24)
#define RTM_DELTCLASS (RTM_BASE+25)
#define RTM_GETTCLASS (RTM_BASE+26)
#define RTM_NEWTFILTER (RTM_BASE+28)
#define RTM_DELTFILTER (RTM_BASE+29)
#define RTM_GETTFILTER (RTM_BASE+30)
#define RTM_NEWACTION (RTM_BASE+32)
#define RTM_DELACTION (RTM_BASE+33)
#define RTM_GETACTION (RTM_BASE+34)
#define RTM_NEWPREFIX (RTM_BASE+36)
#define RTM_GETPREFIX (RTM_BASE+38)
#define RTM_GETMULTICAST (RTM_BASE+42)
#define RTM_GETANYCAST (RTM_BASE+46)
#define RTM_MAX (RTM_BASE+47)
/*
Generic structure for encapsulation of optional route information.
It is reminiscent of sockaddr, but with sa_family replaced
with attribute type.
*/
struct
rtattr
{
unsigned
short
rta_len
;
unsigned
short
rta_type
;
};
/* Macros to handle rtattributes */
#define RTA_ALIGNTO 4
#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
(rta)->rta_len >= sizeof(struct rtattr) && \
(rta)->rta_len <= (len))
#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
(struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
/******************************************************************************
* Definitions used in routing table administration.
****/
struct
rtmsg
{
unsigned
char
rtm_family
;
unsigned
char
rtm_dst_len
;
unsigned
char
rtm_src_len
;
unsigned
char
rtm_tos
;
unsigned
char
rtm_table
;
/* Routing table id */
unsigned
char
rtm_protocol
;
/* Routing protocol; see below */
unsigned
char
rtm_scope
;
/* See below */
unsigned
char
rtm_type
;
/* See below */
unsigned
rtm_flags
;
};
/* rtm_type */
enum
{
RTN_UNSPEC
,
RTN_UNICAST
,
/* Gateway or direct route */
RTN_LOCAL
,
/* Accept locally */
RTN_BROADCAST
,
/* Accept locally as broadcast,
send as broadcast */
RTN_ANYCAST
,
/* Accept locally as broadcast,
but send as unicast */
RTN_MULTICAST
,
/* Multicast route */
RTN_BLACKHOLE
,
/* Drop */
RTN_UNREACHABLE
,
/* Destination is unreachable */
RTN_PROHIBIT
,
/* Administratively prohibited */
RTN_THROW
,
/* Not in this table */
RTN_NAT
,
/* Translate this address */
RTN_XRESOLVE
,
/* Use external resolver */
__RTN_MAX
};
#define RTN_MAX (__RTN_MAX - 1)
/* rtm_protocol */
#define RTPROT_UNSPEC 0
#define RTPROT_REDIRECT 1
/* Route installed by ICMP redirects;
not used by current IPv4 */
#define RTPROT_KERNEL 2
/* Route installed by kernel */
#define RTPROT_BOOT 3
/* Route installed during boot */
#define RTPROT_STATIC 4
/* Route installed by administrator */
/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
they are just passed from user and back as is.
It will be used by hypothetical multiple routing daemons.
Note that protocol values should be standardized in order to
avoid conflicts.
*/
#define RTPROT_GATED 8
/* Apparently, GateD */
#define RTPROT_RA 9
/* RDISC/ND router advertisements */
#define RTPROT_MRT 10
/* Merit MRT */
#define RTPROT_ZEBRA 11
/* Zebra */
#define RTPROT_BIRD 12
/* BIRD */
#define RTPROT_DNROUTED 13
/* DECnet routing daemon */
#define RTPROT_XORP 14
/* XORP */
/* rtm_scope
Really it is not scope, but sort of distance to the destination.
NOWHERE are reserved for not existing destinations, HOST is our
local addresses, LINK are destinations, located on directly attached
link and UNIVERSE is everywhere in the Universe.
Intermediate values are also possible f.e. interior routes
could be assigned a value between UNIVERSE and LINK.
*/
enum
rt_scope_t
{
RT_SCOPE_UNIVERSE
=
0
,
/* User defined values */
RT_SCOPE_SITE
=
200
,
RT_SCOPE_LINK
=
253
,
RT_SCOPE_HOST
=
254
,
RT_SCOPE_NOWHERE
=
255
};
/* rtm_flags */
#define RTM_F_NOTIFY 0x100
/* Notify user of route change */
#define RTM_F_CLONED 0x200
/* This route is cloned */
#define RTM_F_EQUALIZE 0x400
/* Multipath equalizer: NI */
#define RTM_F_PREFIX 0x800
/* Prefix addresses */
/* Reserved table identifiers */
enum
rt_class_t
{
RT_TABLE_UNSPEC
=
0
,
/* User defined values */
RT_TABLE_DEFAULT
=
253
,
RT_TABLE_MAIN
=
254
,
RT_TABLE_LOCAL
=
255
,
__RT_TABLE_MAX
};
#define RT_TABLE_MAX (__RT_TABLE_MAX - 1)
/* Routing message attributes */
enum
rtattr_type_t
{
RTA_UNSPEC
,
RTA_DST
,
RTA_SRC
,
RTA_IIF
,
RTA_OIF
,
RTA_GATEWAY
,
RTA_PRIORITY
,
RTA_PREFSRC
,
RTA_METRICS
,
RTA_MULTIPATH
,
RTA_PROTOINFO
,
RTA_FLOW
,
RTA_CACHEINFO
,
RTA_SESSION
,
__RTA_MAX
};
#define RTA_MAX (__RTA_MAX - 1)
#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
/* RTM_MULTIPATH --- array of struct rtnexthop.
*
* "struct rtnexthop" describes all necessary nexthop information,
* i.e. parameters of path to a destination via this nexthop.
*
* At the moment it is impossible to set different prefsrc, mtu, window
* and rtt for different paths from multipath.
*/
struct
rtnexthop
{
unsigned
short
rtnh_len
;
unsigned
char
rtnh_flags
;
unsigned
char
rtnh_hops
;
int
rtnh_ifindex
;
};
/* rtnh_flags */
#define RTNH_F_DEAD 1
/* Nexthop is dead (used by multipath) */
#define RTNH_F_PERVASIVE 2
/* Do recursive gateway lookup */
#define RTNH_F_ONLINK 4
/* Gateway is forced on link */
/* Macros to handle hexthops */
#define RTNH_ALIGNTO 4
#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
((int)(rtnh)->rtnh_len) <= (len))
#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
/* RTM_CACHEINFO */
struct
rta_cacheinfo
{
__u32
rta_clntref
;
__u32
rta_lastuse
;
__s32
rta_expires
;
__u32
rta_error
;
__u32
rta_used
;
#define RTNETLINK_HAVE_PEERINFO 1
__u32
rta_id
;
__u32
rta_ts
;
__u32
rta_tsage
;
};
/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
enum
{
RTAX_UNSPEC
,
#define RTAX_UNSPEC RTAX_UNSPEC
RTAX_LOCK
,
#define RTAX_LOCK RTAX_LOCK
RTAX_MTU
,
#define RTAX_MTU RTAX_MTU
RTAX_WINDOW
,
#define RTAX_WINDOW RTAX_WINDOW
RTAX_RTT
,
#define RTAX_RTT RTAX_RTT
RTAX_RTTVAR
,
#define RTAX_RTTVAR RTAX_RTTVAR
RTAX_SSTHRESH
,
#define RTAX_SSTHRESH RTAX_SSTHRESH
RTAX_CWND
,
#define RTAX_CWND RTAX_CWND
RTAX_ADVMSS
,
#define RTAX_ADVMSS RTAX_ADVMSS
RTAX_REORDERING
,
#define RTAX_REORDERING RTAX_REORDERING
RTAX_HOPLIMIT
,
#define RTAX_HOPLIMIT RTAX_HOPLIMIT
RTAX_INITCWND
,
#define RTAX_INITCWND RTAX_INITCWND
RTAX_FEATURES
,
#define RTAX_FEATURES RTAX_FEATURES
__RTAX_MAX
};
#define RTAX_MAX (__RTAX_MAX - 1)
#define RTAX_FEATURE_ECN 0x00000001
#define RTAX_FEATURE_SACK 0x00000002
#define RTAX_FEATURE_TIMESTAMP 0x00000004
struct
rta_session
{
__u8
proto
;
union
{
struct
{
__u16
sport
;
__u16
dport
;
}
ports
;
struct
{
__u8
type
;
__u8
code
;
__u16
ident
;
}
icmpt
;
__u32
spi
;
}
u
;
};
/*********************************************************
* Interface address.
****/
struct
ifaddrmsg
{
unsigned
char
ifa_family
;
unsigned
char
ifa_prefixlen
;
/* The prefix length */
unsigned
char
ifa_flags
;
/* Flags */
unsigned
char
ifa_scope
;
/* See above */
int
ifa_index
;
/* Link index */
};
enum
{
IFA_UNSPEC
,
IFA_ADDRESS
,
IFA_LOCAL
,
IFA_LABEL
,
IFA_BROADCAST
,
IFA_ANYCAST
,
IFA_CACHEINFO
,
IFA_MULTICAST
,
__IFA_MAX
};
#define IFA_MAX (__IFA_MAX - 1)
/* ifa_flags */
#define IFA_F_SECONDARY 0x01
#define IFA_F_TEMPORARY IFA_F_SECONDARY
#define IFA_F_DEPRECATED 0x20
#define IFA_F_TENTATIVE 0x40
#define IFA_F_PERMANENT 0x80
struct
ifa_cacheinfo
{
__u32
ifa_prefered
;
__u32
ifa_valid
;
__u32
cstamp
;
/* created timestamp, hundredths of seconds */
__u32
tstamp
;
/* updated timestamp, hundredths of seconds */
};
#define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
/*
Important comment:
IFA_ADDRESS is prefix address, rather than local interface address.
It makes no difference for normally configured broadcast interfaces,
but for point-to-point IFA_ADDRESS is DESTINATION address,
local address is supplied in IFA_LOCAL attribute.
*/
/**************************************************************
* Neighbour discovery.
****/
struct
ndmsg
{
unsigned
char
ndm_family
;
unsigned
char
ndm_pad1
;
unsigned
short
ndm_pad2
;
int
ndm_ifindex
;
/* Link index */
__u16
ndm_state
;
__u8
ndm_flags
;
__u8
ndm_type
;
};
enum
{
NDA_UNSPEC
,
NDA_DST
,
NDA_LLADDR
,
NDA_CACHEINFO
,
__NDA_MAX
};
#define NDA_MAX (__NDA_MAX - 1)
#define NDA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
#define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg))
/*
* Neighbor Cache Entry Flags
*/
#define NTF_PROXY 0x08
/* == ATF_PUBL */
#define NTF_ROUTER 0x80
/*
* Neighbor Cache Entry States.
*/
#define NUD_INCOMPLETE 0x01
#define NUD_REACHABLE 0x02
#define NUD_STALE 0x04
#define NUD_DELAY 0x08
#define NUD_PROBE 0x10
#define NUD_FAILED 0x20
/* Dummy states */
#define NUD_NOARP 0x40
#define NUD_PERMANENT 0x80
#define NUD_NONE 0x00
struct
nda_cacheinfo
{
__u32
ndm_confirmed
;
__u32
ndm_used
;
__u32
ndm_updated
;
__u32
ndm_refcnt
;
};
/****
* General form of address family dependent message.
****/
struct
rtgenmsg
{
unsigned
char
rtgen_family
;
};
/*****************************************************************
* Link layer specific messages.
****/
/* struct ifinfomsg
* passes link level specific information, not dependent
* on network protocol.
*/
struct
ifinfomsg
{
unsigned
char
ifi_family
;
unsigned
char
__ifi_pad
;
unsigned
short
ifi_type
;
/* ARPHRD_* */
int
ifi_index
;
/* Link index */
unsigned
ifi_flags
;
/* IFF_* flags */
unsigned
ifi_change
;
/* IFF_* change mask */
};
/********************************************************************
* prefix information
****/
struct
prefixmsg
{
unsigned
char
prefix_family
;
int
prefix_ifindex
;
unsigned
char
prefix_type
;
unsigned
char
prefix_len
;
unsigned
char
prefix_flags
;
};
enum
{
PREFIX_UNSPEC
,
PREFIX_ADDRESS
,
PREFIX_CACHEINFO
,
__PREFIX_MAX
};
#define PREFIX_MAX (__PREFIX_MAX - 1)
struct
prefix_cacheinfo
{
__u32
preferred_time
;
__u32
valid_time
;
};
/* The struct should be in sync with struct net_device_stats */
struct
rtnl_link_stats
{
__u32
rx_packets
;
/* total packets received */
__u32
tx_packets
;
/* total packets transmitted */
__u32
rx_bytes
;
/* total bytes received */
__u32
tx_bytes
;
/* total bytes transmitted */
__u32
rx_errors
;
/* bad packets received */
__u32
tx_errors
;
/* packet transmit problems */
__u32
rx_dropped
;
/* no space in linux buffers */
__u32
tx_dropped
;
/* no space available in linux */
__u32
multicast
;
/* multicast packets received */
__u32
collisions
;
/* detailed rx_errors: */
__u32
rx_length_errors
;
__u32
rx_over_errors
;
/* receiver ring buff overflow */
__u32
rx_crc_errors
;
/* recved pkt with crc error */
__u32
rx_frame_errors
;
/* recv'd frame alignment error */
__u32
rx_fifo_errors
;
/* recv'r fifo overrun */
__u32
rx_missed_errors
;
/* receiver missed packet */
/* detailed tx_errors */
__u32
tx_aborted_errors
;
__u32
tx_carrier_errors
;
__u32
tx_fifo_errors
;
__u32
tx_heartbeat_errors
;
__u32
tx_window_errors
;
/* for cslip etc */
__u32
rx_compressed
;
__u32
tx_compressed
;
};
enum
{
IFLA_UNSPEC
,
IFLA_ADDRESS
,
IFLA_BROADCAST
,
IFLA_IFNAME
,
IFLA_MTU
,
IFLA_LINK
,
IFLA_QDISC
,
IFLA_STATS
,
IFLA_COST
,
#define IFLA_COST IFLA_COST
IFLA_PRIORITY
,
#define IFLA_PRIORITY IFLA_PRIORITY
IFLA_MASTER
,
#define IFLA_MASTER IFLA_MASTER
IFLA_WIRELESS
,
/* Wireless Extension event - see wireless.h */
#define IFLA_WIRELESS IFLA_WIRELESS
IFLA_PROTINFO
,
/* Protocol specific information for a link */
#define IFLA_PROTINFO IFLA_PROTINFO
__IFLA_MAX
};
#define IFLA_MAX (__IFLA_MAX - 1)
#define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
/* ifi_flags.
IFF_* flags.
The only change is:
IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
more not changeable by user. They describe link media
characteristics and set by device driver.
Comments:
- Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
- If neither of these three flags are set;
the interface is NBMA.
- IFF_MULTICAST does not mean anything special:
multicasts can be used on all not-NBMA links.
IFF_MULTICAST means that this media uses special encapsulation
for multicast frames. Apparently, all IFF_POINTOPOINT and
IFF_BROADCAST devices are able to use multicasts too.
*/
/* IFLA_LINK.
For usual devices it is equal ifi_index.
If it is a "virtual interface" (f.e. tunnel), ifi_link
can point to real physical interface (f.e. for bandwidth calculations),
or maybe 0, what means, that real media is unknown (usual
for IPIP tunnels, when route to endpoint is allowed to change)
*/
/* Subtype attributes for IFLA_PROTINFO */
enum
{
IFLA_INET6_UNSPEC
,
IFLA_INET6_FLAGS
,
/* link flags */
IFLA_INET6_CONF
,
/* sysctl parameters */
IFLA_INET6_STATS
,
/* statistics */
IFLA_INET6_MCAST
,
/* MC things. What of them? */
IFLA_INET6_CACHEINFO
,
/* time values and max reasm size */
__IFLA_INET6_MAX
};
#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
struct
ifla_cacheinfo
{
__u32
max_reasm_len
;
__u32
tstamp
;
/* ipv6InterfaceTable updated timestamp */
__u32
reachable_time
;
__u32
retrans_time
;
};
/*****************************************************************
* Traffic control messages.
****/
struct
tcmsg
{
unsigned
char
tcm_family
;
unsigned
char
tcm__pad1
;
unsigned
short
tcm__pad2
;
int
tcm_ifindex
;
__u32
tcm_handle
;
__u32
tcm_parent
;
__u32
tcm_info
;
};
enum
{
TCA_UNSPEC
,
TCA_KIND
,
TCA_OPTIONS
,
TCA_STATS
,
TCA_XSTATS
,
TCA_RATE
,
TCA_FCNT
,
__TCA_MAX
};
#define TCA_MAX (__TCA_MAX - 1)
#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
/* SUMMARY: maximal rtattr understood by kernel */
#define RTATTR_MAX RTA_MAX
/* RTnetlink multicast groups */
#define RTMGRP_LINK 1
#define RTMGRP_NOTIFY 2
#define RTMGRP_NEIGH 4
#define RTMGRP_TC 8
#define RTMGRP_IPV4_IFADDR 0x10
#define RTMGRP_IPV4_MROUTE 0x20
#define RTMGRP_IPV4_ROUTE 0x40
#define RTMGRP_IPV6_IFADDR 0x100
#define RTMGRP_IPV6_MROUTE 0x200
#define RTMGRP_IPV6_ROUTE 0x400
#define RTMGRP_IPV6_IFINFO 0x800
#define RTMGRP_DECnet_IFADDR 0x1000
#define RTMGRP_DECnet_ROUTE 0x4000
#define RTMGRP_IPV6_PREFIX 0x20000
/* TC action piece */
struct
tcamsg
{
unsigned
char
tca_family
;
unsigned
char
tca__pad1
;
unsigned
short
tca__pad2
;
};
#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
#define TCA_ACT_TAB 1
/* attr type must be >=1 */
#define TCAA_MAX 1
/* End of information exported to user level */
#endif
/* __LINUX_RTNETLINK_H */
include/linux/tcp_diag.h
View file @
0633baa1
#ifndef _TCP_DIAG_H_
#define _TCP_DIAG_H_ 1
/* Just some random number */
#define TCPDIAG_GETSOCK 18
/* Socket identity */
struct
tcpdiag_sockid
{
__u16
tcpdiag_sport
;
__u16
tcpdiag_dport
;
__u32
tcpdiag_src
[
4
];
__u32
tcpdiag_dst
[
4
];
__u32
tcpdiag_if
;
__u32
tcpdiag_cookie
[
2
];
#define TCPDIAG_NOCOOKIE (~0U)
};
/* Request structure */
struct
tcpdiagreq
{
__u8
tcpdiag_family
;
/* Family of addresses. */
__u8
tcpdiag_src_len
;
__u8
tcpdiag_dst_len
;
__u8
tcpdiag_ext
;
/* Query extended information */
struct
tcpdiag_sockid
id
;
__u32
tcpdiag_states
;
/* States to dump */
__u32
tcpdiag_dbs
;
/* Tables to dump (NI) */
};
enum
{
TCPDIAG_REQ_NONE
,
TCPDIAG_REQ_BYTECODE
,
};
#define TCPDIAG_REQ_MAX TCPDIAG_REQ_BYTECODE
/* Bytecode is sequence of 4 byte commands followed by variable arguments.
* All the commands identified by "code" are conditional jumps forward:
* to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
* length of the command and its arguments.
*/
struct
tcpdiag_bc_op
{
unsigned
char
code
;
unsigned
char
yes
;
unsigned
short
no
;
};
enum
{
TCPDIAG_BC_NOP
,
TCPDIAG_BC_JMP
,
TCPDIAG_BC_S_GE
,
TCPDIAG_BC_S_LE
,
TCPDIAG_BC_D_GE
,
TCPDIAG_BC_D_LE
,
TCPDIAG_BC_AUTO
,
TCPDIAG_BC_S_COND
,
TCPDIAG_BC_D_COND
,
};
struct
tcpdiag_hostcond
{
__u8
family
;
__u8
prefix_len
;
int
port
;
__u32
addr
[
0
];
};
/* Base info structure. It contains socket identity (addrs/ports/cookie)
* and, alas, the information shown by netstat. */
struct
tcpdiagmsg
{
__u8
tcpdiag_family
;
__u8
tcpdiag_state
;
__u8
tcpdiag_timer
;
__u8
tcpdiag_retrans
;
struct
tcpdiag_sockid
id
;
__u32
tcpdiag_expires
;
__u32
tcpdiag_rqueue
;
__u32
tcpdiag_wqueue
;
__u32
tcpdiag_uid
;
__u32
tcpdiag_inode
;
};
/* Extensions */
enum
{
TCPDIAG_NONE
,
TCPDIAG_MEMINFO
,
TCPDIAG_INFO
,
TCPDIAG_VEGASINFO
,
};
#define TCPDIAG_MAX TCPDIAG_VEGASINFO
/* TCPDIAG_MEM */
struct
tcpdiag_meminfo
{
__u32
tcpdiag_rmem
;
__u32
tcpdiag_wmem
;
__u32
tcpdiag_fmem
;
__u32
tcpdiag_tmem
;
};
/* TCPDIAG_VEGASINFO */
struct
tcpvegas_info
{
__u32
tcpv_enabled
;
__u32
tcpv_rttcnt
;
__u32
tcpv_rtt
;
__u32
tcpv_minrtt
;
};
#endif
/* _TCP_DIAG_H_ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment