Home | History | Annotate | Download | only in netstat
History log of /src/usr.bin/netstat/netstat.h
RevisionDateAuthorComments
 1.54  18-Aug-2023  martin Rename local bpf_* functions to nsbpf_* to avoid conflicts with
new libpcap bpf_* functions
 1.53  01-Sep-2022  msaitoh KNF. No functional change.
 1.52  23-Apr-2020  joerg Avoid common symbol definitions.
 1.51  06-Nov-2014  christos branches: 1.51.8; 1.51.18;
use the common code from route.c
 1.50  28-Apr-2014  christos branches: 1.50.2;
use the same for the route metrics part, both in the sysctl and kmem paths.
From Takahiro HAYASHI
 1.49  24-Apr-2014  christos un __P
 1.48  23-Nov-2013  christos branches: 1.48.2;
Update for new pcb tailq's.
While here fix ipv6 pcb printing by making tcp6_dump with tcp.
XXX: Merge the inet and the inet6 code. It is silly to need to specify
-p tcp6 to print a tcp6 pcb, we already know what it is.
 1.47  19-Jun-2013  christos Don't use -P as a kmem printer, verify that the address points to a pcb first!
 1.46  01-Mar-2013  joerg Retire OSI network stack. OK core@
 1.45  28-Jan-2013  joerg Use sysctl based code netstat -r. Remove support for post-mortem
analysis.
 1.44  22-Mar-2012  drochner branches: 1.44.2;
remove KAME IPSEC, replaced by FAST_IPSEC
 1.43  21-Jun-2011  kefren branches: 1.43.2; 1.43.4; 1.43.8; 1.43.10;
print multiple tags if exists, comma separated
 1.42  03-May-2011  dyoung Reduces the resources demanded by TCP sessions in TIME_WAIT-state using
methods called Vestigial Time-Wait (VTW) and Maximum Segment Lifetime
Truncation (MSLT).

MSLT and VTW were contributed by Coyote Point Systems, Inc.

Even after a TCP session enters the TIME_WAIT state, its corresponding
socket and protocol control blocks (PCBs) stick around until the TCP
Maximum Segment Lifetime (MSL) expires. On a host whose workload
necessarily creates and closes down many TCP sockets, the sockets & PCBs
for TCP sessions in TIME_WAIT state amount to many megabytes of dead
weight in RAM.

Maximum Segment Lifetimes Truncation (MSLT) assigns each TCP session to
a class based on the nearness of the peer. Corresponding to each class
is an MSL, and a session uses the MSL of its class. The classes are
loopback (local host equals remote host), local (local host and remote
host are on the same link/subnet), and remote (local host and remote
host communicate via one or more gateways). Classes corresponding to
nearer peers have lower MSLs by default: 2 seconds for loopback, 10
seconds for local, 60 seconds for remote. Loopback and local sessions
expire more quickly when MSLT is used.

Vestigial Time-Wait (VTW) replaces a TIME_WAIT session's PCB/socket
dead weight with a compact representation of the session, called a
"vestigial PCB". VTW data structures are designed to be very fast and
memory-efficient: for fast insertion and lookup of vestigial PCBs,
the PCBs are stored in a hash table that is designed to minimize the
number of cacheline visits per lookup/insertion. The memory both
for vestigial PCBs and for elements of the PCB hashtable come from
fixed-size pools, and linked data structures exploit this to conserve
memory by representing references with a narrow index/offset from the
start of a pool instead of a pointer. When space for new vestigial PCBs
runs out, VTW makes room by discarding old vestigial PCBs, oldest first.
VTW cooperates with MSLT.

It may help to think of VTW as a "FIN cache" by analogy to the SYN
cache.

A 2.8-GHz Pentium 4 running a test workload that creates TIME_WAIT
sessions as fast as it can is approximately 17% idle when VTW is active
versus 0% idle when VTW is inactive. It has 103 megabytes more free RAM
when VTW is active (approximately 64k vestigial PCBs are created) than
when it is inactive.
 1.41  27-Jun-2010  kefren Add -T flag, that shows tags in route output
 1.40  24-Feb-2010  pooka Add -h, which makes output of bytes counts "humanized" (e.g. -bih)

(netstat had -h some 15 years ago, but since then it has been just
a fancy way of calling usage())
 1.39  14-Sep-2009  degroote Import pfsync support from OpenBSD 4.2

Pfsync interface exposes change in the pf(4) over a pseudo-interface, and can
be used to synchronise different pf.

This work was part of my 2009 GSoC

No objection on tech-net@
 1.38  13-Sep-2009  elad Checkin work in progress to make netstat use sysctl rather than kvm(3).

This commit mostly adds code written by Claudio Jeker for OpenBSD to
support sysctl in the interface printing parts (-i, -I, -w). The port has
been ported to NetBSD with tiny adjustments -- of course all bugs etc.
are mine.

Also add and document a -X flag to force sysctl usage. The documentation
notes this flag may be removed at any time and its presence should not be
relied on.

Some misc. comments/#ifdef changes/code snippet moves as well.

Please note that no functionality should change as the routing and
interface printing code is still not fully supported.

Mailing list reference:

http://mail-index.netbsd.org/tech-userlevel/2009/09/09/msg002604.html
 1.37  12-Apr-2009  lukem Fix many WARNS=4 issues (-Wshadow -Wcast-qual -Wsign-compare).
Fix probable bug with numeric printing of anon ports when using sysctl.
 1.36  27-Feb-2008  ad branches: 1.36.6; 1.36.8; 1.36.10; 1.36.16;
- Define _KERNEL for sys/types.h in unix.c.
- caddr_t -> char * in a couple of places.
 1.35  28-May-2006  elad branches: 1.35.10; 1.35.16;
Make netstat use sysctl when dumping routing tables/stats.
Heavily based on similar code from Claudio Jeker (at OpenBSD).

While here, fix inet/inet6 sysctl stuff commited previously to
actually work, and some other nits to make netstat more sysctl
friendly.

One step closer to losing setgid kmem on this one...
 1.34  23-May-2006  rpaulo Fix carp_stats() prototype location.
Noticed by Iain Hibbert.
 1.33  18-May-2006  liamjfoy branches: 1.33.2;
Integrate Common Address Redundancy Procotol (CARP) from OpenBSD

'pseudo-device carp'

Thanks to: joerg@ christos@ riz@ and others who tested
Ok: core@
 1.32  02-Sep-2005  rpaulo Request process information using sysctl(3) and not kvm(3) since bpf(4)
statistics and peers are only available using the former.
 1.31  04-Aug-2005  rpaulo Implemented the userland part of the BPF statistics and BPF peers,
net.bpf.stats and net.bpf.peers sysctls respectively. netstat(1) now
has an additional syntax:
netstat [-s] [-B] [-I Interface]

Only the super user can see a list of BPF peers with the following command:
# netstat -B
Active BPF peers
PID Int Recv Drop Capt Flags Bufsize Comm
4941 lo0 0 0 0 I--S- 262144 tcpdump
252 ex0 19668 0 5 I-RS- 32768 dhclient

And every user can see the BPF statistics with:
$ netstat -s -B
bpf:
19669 total packets received
5 total packets captured
0 total packets dropped

This idea came from FreeBSD (Christian S.J. Peron) but, currently, they
doen't have a userland utility in the base system to read the sysctls.

Reviewed by: christos@
 1.30  04-Sep-2004  manu IPv4 PIM support, from the submission of Pavlin Radoslavov on tech-net@
 1.29  07-May-2004  jonathan Redo net.inet.* sysctl subtree for fast-ipsec from scratch.
Attach FAST-IPSEC statistics with 64-bit counters to new sysctl MIB.
Rework netstat to show FAST_IPSEC statistics, via sysctl, for
netstat -p ipsec.

New kernel files:
sys/netipsec/Makefile (new file; install *_var.h includes)
sys/netipsec/ipsec_var.h (new 64-bit mib counter struct)

Changed kernel files:
sys/Makefile (recurse into sys/netipsec/)
sys/netinet/in.h (fake IP_PROTO name for fast_ipsec
sysctl subtree.)
sys/netipsec/ipsec.h (minimal userspace inclusion)
sys/netipsec/ipsec_osdep.h (minimal userspace inclusion)
sys/netipsec/ipsec_netbsd.c (redo sysctl subtree from scratch)
sys/netipsec/key*.c (fix broken net.key subtree)

sys/netipsec/ah_var.h (increase all counters to 64 bits)
sys/netipsec/esp_var.h (increase all counters to 64 bits)
sys/netipsec/ipip_var.h (increase all counters to 64 bits)
sys/netipsec/ipcomp_var.h (increase all counters to 64 bits)

sys/netipsec/ipsec.c (add #include netipsec/ipsec_var.h)
sys/netipsec/ipsec_mbuf.c (add #include netipsec/ipsec_var.h)
sys/netipsec/ipsec_output.c (add #include netipsec/ipsec_var.h)

sys/netinet/raw_ip.c (add #include netipsec/ipsec_var.h)
sys/netinet/tcp_input.c (add #include netipsec/ipsec_var.h)
sys/netinet/udp_usrreq.c (add #include netipsec/ipsec_var.h)

Changes to usr.bin/netstat to print the new fast-ipsec sysctl tree
for "netstat -s -p ipsec":

New file:
usr.bin/netstat/fast_ipsec.c (print fast-ipsec counters)

Changed files:
usr.bin/netstat/Makefile (add fast_ipsec.c)
usr.bin/netstat/netstat.h (declarations for fast_ipsec.c)
usr.bin/netstat/main.c (call KAME-vs-fast-ipsec dispatcher)
 1.28  07-Aug-2003  agc branches: 1.28.2;
Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22365, verified by myself.
 1.27  26-Feb-2003  matt Add MBUFTRACE kernel option.
Do a little mbuf rework while here. Change all uses of MGET*(*, M_WAIT, *)
to m_get*(M_WAIT, *). These are not performance critical and making them
call m_get saves considerable space. Add m_clget analogue of MCLGET and
make corresponding change for M_WAIT uses.
Modify netinet, gem, fxp, tulip, nfs to support MBUFTRACE.
Begin to change netstat to use sysctl.
 1.26  04-Feb-2003  thorpej Update for callout changes, and show TCP timers in relative, rather
than absolute ticks.
 1.25  03-Jul-2002  enami Introduce -q flag to print some information (like number of packets dropped
due to queue full) about software interrupt queues such as ipintrq.
 1.24  27-Feb-2002  lukem clarification of vflag
 1.23  18-Oct-2001  itojun print rip6stat. sync with kame
 1.22  28-May-2001  assar add `-s' that prints port numbers symbolically but addresses numerically
 1.21  19-Feb-2001  cgd convert to use getprogname()
 1.20  15-Aug-2000  jhawk Add kernel counters for arp events, displayable with netstat -s -f arp
 1.19  06-Jul-2000  itojun more stats. from kame
 1.18  26-Feb-2000  itojun revise IPsec, pfkey, IPv6 multicast and IPv6 statistics. (sync with kame)
 1.17  13-Dec-1999  itojun per-interface statistics.
bring in and enable KAME scopeid hack.
lots of cleanups.
(sync with latest KAME)
 1.16  22-Nov-1999  itojun use old WID_{DST,GW} value (field width for netstat -rn) for non-INET6
address families (see tech-net discussion).
 1.15  15-Sep-1999  is branches: 1.15.4;
Add -L option. netstat -r -L behaves like 4.3BSD netstat -r, that is, it
does not show route table entries pointing to link level addresses (ARP
entries or IPv6 neighbour discovery entries).
 1.14  01-Jul-1999  itojun make netstat IPv6-ready.
 1.13  27-Feb-1999  sommerfe fix PR7057: division by zero if no mbufs allocated
fix PR7059 (partial): mbuf cluster counts were based on counters which
are no longer maintained.
(full fix will involve renaming the now-unused fields in mclstat in mbuf.h)
 1.12  15-Jan-1999  kml Added a verbose flag for route display that will show
the various route metrics.
 1.11  11-Jan-1999  mrg #ifndef SMALL changes. saves 30k on the sparc
 1.10  03-Jun-1998  thorpej Add an option to dump the contents of a PCB at the specified address, and
implement this for TCP.
 1.9  19-Mar-1998  kml Add support for a '-b' option to provide byte counts in and out,
instead of just packet counts. On the byte screens, errors and
collisions are not shown, since they are more packet count related.
 1.8  03-Apr-1997  christos branches: 1.8.4;
- netatalk additions
- printf format fixes
- minor prototype cleanups
 1.7  28-Feb-1997  jonathan Add compiled-in MCLBYTES and MSIZE to conf/param.c, as 'mclbytes" and "msize".

Add code to netstat to use libkvm to for kernel variables "mclbytes"
and "msize', and if found, use those for netstat -m rather than
compiled-in defaults.
 1.6  07-May-1996  thorpej Update for the changes to struct ifnet. While I'm here, fix a couple
of long-standing bugs:

- Actually deal with the fact that the kernel ifnet list is
a TAILQ; it just happened to work before.

- Use kvm_openfiles() instead of kvm_open(). The code passed
arguments to kvm_open() as if it were kvm_openfiles(), but
apparently went unnoticed since the prototypes are the same.
Amusing bit: there were XXX's in the code which seemed to
apologize for a verbose libkvm, when it happened to be a
bug in netstat!
 1.5  03-Oct-1995  thorpej New-style RCS ids.
 1.4  03-Jul-1995  mycroft Byte-swap correctly. Make some types 64-bit safe. Use INADDR_ANY rather
than an explicit 0.
 1.3  12-Jun-1995  mycroft Update to match kernel changes.
 1.2  13-May-1994  mycroft Clean up import.
 1.1  13-May-1994  mycroft branches: 1.1.1;
Initial revision
 1.1.1.1  06-Oct-1994  mycroft Import original 4.4-Lite version.
 1.8.4.1  19-Jan-1999  cgd pull up rev 1.11 from trunk (mrg)
 1.15.4.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.28.2.1  10-May-2004  tron Pull up revision 1.29 (requested by jonathan in ticket #280):
Redo net.inet.* sysctl subtree for fast-ipsec from scratch.
Attach FAST-IPSEC statistics with 64-bit counters to new sysctl MIB.
Rework netstat to show FAST_IPSEC statistics, via sysctl, for
netstat -p ipsec.
New kernel files:
sys/netipsec/Makefile (new file; install *_var.h includes)
sys/netipsec/ipsec_var.h (new 64-bit mib counter struct)
Changed kernel files:
sys/Makefile (recurse into sys/netipsec/)
sys/netinet/in.h (fake IP_PROTO name for fast_ipsec
sysctl subtree.)
sys/netipsec/ipsec.h (minimal userspace inclusion)
sys/netipsec/ipsec_osdep.h (minimal userspace inclusion)
sys/netipsec/ipsec_netbsd.c (redo sysctl subtree from scratch)
sys/netipsec/key*.c (fix broken net.key subtree)
sys/netipsec/ah_var.h (increase all counters to 64 bits)
sys/netipsec/esp_var.h (increase all counters to 64 bits)
sys/netipsec/ipip_var.h (increase all counters to 64 bits)
sys/netipsec/ipcomp_var.h (increase all counters to 64 bits)
sys/netipsec/ipsec.c (add #include netipsec/ipsec_var.h)
sys/netipsec/ipsec_mbuf.c (add #include netipsec/ipsec_var.h)
sys/netipsec/ipsec_output.c (add #include netipsec/ipsec_var.h)
sys/netinet/raw_ip.c (add #include netipsec/ipsec_var.h)
sys/netinet/tcp_input.c (add #include netipsec/ipsec_var.h)
sys/netinet/udp_usrreq.c (add #include netipsec/ipsec_var.h)
Changes to usr.bin/netstat to print the new fast-ipsec sysctl tree
for "netstat -s -p ipsec":
New file:
usr.bin/netstat/fast_ipsec.c (print fast-ipsec counters)
Changed files:
usr.bin/netstat/Makefile (add fast_ipsec.c)
usr.bin/netstat/netstat.h (declarations for fast_ipsec.c)
usr.bin/netstat/main.c (call KAME-vs-fast-ipsec dispatcher)
 1.33.2.1  19-Jun-2006  chap Sync with head.
 1.35.16.1  24-Mar-2008  keiichi sync with head.
 1.35.10.1  23-Mar-2008  matt sync with HEAD
 1.36.16.1  30-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #1868):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.36.10.1  13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.36.8.1  30-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #1868):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.36.6.1  30-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #1868):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.43.10.1  29-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #912):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.43.8.1  29-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #912):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.43.4.1  29-Jul-2013  msaitoh Pull up following revision(s) (requested by christos in ticket #912):
usr.bin/netstat/main.c: revision 1.86
usr.bin/netstat/netstat.h: revision 1.47
usr.bin/netstat/inet.c: revision 1.102
usr.bin/netstat/inet.c: revision 1.103
usr.bin/netstat/inet6.c: revision 1.61
usr.bin/netstat/inet6.c: revision 1.62
Don't use -P as a kmem printer, verify that the address points to a pcb first!
Not all pointers are 64bit - use uintptr_t instead of uint64_t.
 1.43.2.2  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.43.2.1  17-Apr-2012  yamt sync with head
 1.44.2.3  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.44.2.2  23-Jun-2013  tls resync from head
 1.44.2.1  25-Feb-2013  tls resync with head
 1.48.2.1  10-Aug-2014  tls Rebase.
 1.50.2.1  08-Jan-2015  martin Pull up following revision(s) (requested by prlw1 in ticket #390):
usr.bin/netstat/mroute.c: revision 1.25
usr.bin/netstat/Makefile: revision 1.40
sbin/route/prog_ops.h: revision 1.3
sbin/route/rtutil.c: revision 1.1
sbin/route/rtutil.h: revision 1.1
usr.bin/netstat/mroute6.c: revision 1.15
sbin/route/extern.h: revision 1.15
usr.bin/netstat/show.c: file removal
usr.bin/netstat/main.c: revision 1.93
usr.bin/netstat/route.c: revision 1.83
usr.bin/netstat/netstat.h: revision 1.51
distrib/utils/x_route/Makefile: revision 1.18
sbin/route/show.c: revision 1.46
usr.bin/netstat/if.c: revision 1.80
sbin/route/route.c: revision 1.145
sbin/route/Makefile: revision 1.26
Factor out the netstat route printing code and use it here. There is no
point in having 2 different copies; fixes PR/49371
 1.51.18.1  12-Sep-2022  martin Pull up the following, requested by msaitoh in ticket #1522:

usr.bin/netstat/atalk.c 1.18,1.20-1.21
usr.bin/netstat/bpf.c 1.16 via patch
usr.bin/netstat/fast_ipsec.c 1.24
usr.bin/netstat/if.c 1.97-1.99,1.101-1.104 via patch
usr.bin/netstat/inet.c 1.111,1.115-1.116 via patch
usr.bin/netstat/inet6.c 1.74-1.75,1.80-1.81 via patch
usr.bin/netstat/main.c 1.100-1.103
usr.bin/netstat/mbuf.c 1.35
usr.bin/netstat/mroute.c 1.26-1.27
usr.bin/netstat/mroute6.c 1.16
usr.bin/netstat/netstat.h 1.52-1.53
usr.bin/netstat/pfkey.c 1.4-1.5 via patch
usr.bin/netstat/pfsync.c 1.4-1.5 via patch
usr.bin/netstat/route.c 1.86-1.88
usr.bin/netstat/unix.c 1.36-1.37
usr.bin/netstat/vtw.c 1.11,1.13

- sprintf() -> snprintf(), and adjust a buffer size to avoid any
potential for overflow.
- Fix netstat -rs to print it correctly.
- Add missing {IP,IP6}_STAT_NOIPSEC to netstat.
- Don't show any of the completely and utterly undocumented VTW info
if the feature isn't enabled.
- Print oqdrops correctly.
- Remove Network ATM soft intr queue reporting, we don't have that
in the kernel anymore.
- netstat.1: Add various xrefs present in the body to "See Also".
- KNF. Style fixes.
 1.51.8.1  12-Sep-2022  martin Pull up the following, requested by msaitoh in ticket #1762:

usr.bin/netstat/atalk.c 1.18,1.20-1.21
usr.bin/netstat/bpf.c 1.16 via patch
usr.bin/netstat/fast_ipsec.c 1.24 via patch
usr.bin/netstat/if.c 1.97-1.99,1.101-1.104 via patch
usr.bin/netstat/inet.c 1.111,1.115-1.116 via patch
usr.bin/netstat/inet6.c 1.70,1.74-1.75,1.80-1.81 via patch
usr.bin/netstat/main.c 1.100,1.102-1.103
usr.bin/netstat/mbuf.c 1.34-1.35
usr.bin/netstat/mroute.c 1.26-1.27
usr.bin/netstat/mroute6.c 1.16
usr.bin/netstat/netstat.h 1.52-1.53
usr.bin/netstat/pfkey.c 1.4-1.5 via patch
usr.bin/netstat/pfsync.c 1.4-1.5 via patch
usr.bin/netstat/route.c 1.87-1.88
usr.bin/netstat/unix.c 1.36-1.37
usr.bin/netstat/vtw.c 1.11,1.13

- Add names of a few more ICMPv6 messages.
Also make the array be explicitly 256 entries long.
- sprintf() -> snprintf(), and adjust a buffer size to avoid any
potential for overflow.
- Add missing {IP,IP6}_STAT_NOIPSEC to netstat.
- Don't show any of the completely and utterly undocumented VTW info
if the feature isn't enabled.
- Print oqdrops correctly.
- netstat.1: Add various xrefs present in the body to "See Also".
- Limit maximum owner name to appease gcc.
- KNF. Style fixes.

RSS XML Feed