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
Expand all
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
This diff is collapsed.
Click to expand it.
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