This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 058/114] Add <net/if.h> header for Phoenix.


From: Kuba Sejdak <jakub.sejdak@phoesys.com>

---
 newlib/libc/sys/phoenix/include/net/if.h | 299 +++++++++++++++++++++++++++++++
 1 file changed, 299 insertions(+)
 create mode 100644 newlib/libc/sys/phoenix/include/net/if.h

diff --git a/newlib/libc/sys/phoenix/include/net/if.h b/newlib/libc/sys/phoenix/include/net/if.h
new file mode 100644
index 0000000..ad089f3
--- /dev/null
+++ b/newlib/libc/sys/phoenix/include/net/if.h
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 1982, 1986, 1989, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)if.h	8.1 (Berkeley) 6/10/93
+ * $FreeBSD: src/sys/net/if.h,v 1.71 2002/03/19 21:54:16 alfred Exp $
+ */
+
+#ifndef _NET_IF_H
+#define	_NET_IF_H
+
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+
+struct ifnet;
+
+/*
+ * Length of interface external name, including terminating '\0'.
+ * Note: this is the same size as a generic device's external name.
+ */
+#define	IFNAMSIZ		16
+#define IF_NAMESIZE		IFNAMSIZ
+#define	IF_MAXUNIT		0x7fff			/* ifp->if_unit is only 15 bits */
+
+/* Structure describing a `cloning' interface. */
+struct if_clone {
+	LIST_ENTRY(if_clone) ifc_list;		/* On list of cloners */
+	const char *ifc_name;				/* Name of device, e.g. `gif' */
+	size_t ifc_namelen;					/* Length of name */
+	int ifc_maxunit;					/* Maximum unit number */
+	unsigned char *ifc_units;			/* Bitmap to handle units */
+	int ifc_bmlen;						/* Bitmap length */
+
+	int	(*ifc_create)(struct if_clone *, int);
+	int	(*ifc_destroy)(struct ifnet *);
+};
+
+#define IF_CLONE_INITIALIZER(name, create, destroy, maxunit)		\
+	{ { 0 }, name, sizeof(name) - 1, maxunit, NULL, 0, create, destroy }
+
+/* Structure used to query names of interface cloners. */
+struct if_clonereq {
+	int	ifcr_total;			/* Total cloners (out) */
+	int	ifcr_count;			/* Room for this many in user buffer */
+	char *ifcr_buffer;		/* Buffer for cloner names */
+};
+
+/*
+ * Structure describing information about an interface
+ * which may be of interest to management entities.
+ */
+struct if_data {
+	/* Generic interface information */
+	u_char ifi_type;					/* Ethernet, tokenring, etc */
+	u_char ifi_physical;				/* E.g., AUI, Thinnet, 10base-T, etc */
+	u_char ifi_addrlen;					/* Media address length */
+	u_char ifi_hdrlen;					/* Media header length */
+	u_char ifi_recvquota;				/* Polling quota for receive intrs */
+	u_char ifi_xmitquota;				/* Polling quota for xmit intrs */
+	u_long ifi_mtu;						/* Maximum transmission unit */
+	u_long ifi_metric;					/* Routing metric (external only) */
+	u_long ifi_baudrate;				/* Linespeed */
+	/* Volatile statistics */
+	u_long ifi_ipackets;				/* Packets received on interface */
+	u_long ifi_ierrors;					/* Input errors on interface */
+	u_long ifi_opackets;				/* Packets sent on interface */
+	u_long ifi_oerrors;					/* Output errors on interface */
+	u_long ifi_collisions;				/* Collisions on csma interfaces */
+	u_long ifi_ibytes;					/* Total number of octets received */
+	u_long ifi_obytes;					/* Total number of octets sent */
+	u_long ifi_imcasts;					/* Packets received via multicast */
+	u_long ifi_omcasts;					/* Packets sent via multicast */
+	u_long ifi_iqdrops;					/* Dropped on input, this interface */
+	u_long ifi_noproto;					/* Destined for unsupported protocol */
+	u_long ifi_hwassist;				/* HW offload capabilities */
+	u_long ifi_unused;					/* XXX was ifi_xmittiming */
+	struct timeval ifi_lastchange;		/* Time of last administrative change */
+};
+
+#define	IFF_UP				0x1			/* Interface is up */
+#define	IFF_BROADCAST		0x2			/* Broadcast address valid */
+#define	IFF_DEBUG			0x4			/* Turn on debugging */
+#define	IFF_LOOPBACK		0x8			/* Is a loopback net */
+#define	IFF_POINTOPOINT		0x10		/* Interface is point-to-point link */
+#define	IFF_NOTRAILERS		0x20		/* Avoid use of trailers */
+#define	IFF_RUNNING			0x40		/* Resources allocated */
+#define	IFF_NOARP			0x80		/* No address resolution protocol */
+#define	IFF_PROMISC			0x100		/* Receive all packets */
+#define	IFF_ALLMULTI		0x200		/* Receive all multicast packets */
+#define	IFF_OACTIVE			0x400		/* Transmission in progress */
+#define	IFF_SIMPLEX			0x800		/* Can't hear own transmissions */
+#define	IFF_LINK0			0x1000		/* Per link layer defined bit */
+#define	IFF_LINK1			0x2000		/* Per link layer defined bit */
+#define	IFF_LINK2			0x4000		/* Per link layer defined bit */
+#define	IFF_ALTPHYS			IFF_LINK2	/* Use alternate physical connection */
+#define	IFF_MULTICAST		0x8000		/* Supports multicast */
+
+/*
+ * The following flag(s) ought to go in if_flags, but we cannot change
+ * struct ifnet because of binary compatibility, so we store them in
+ * if_ipending, which is not used so far.
+ * If possible, make sure the value is not conflicting with other
+ * IFF flags, so we have an easier time when we want to merge them.
+ */
+#define	IFF_POLLING			0x10000		/* Interface is in polling mode. */
+
+/* Flags set internally only */
+#define	IFF_CANTCHANGE 		(IFF_BROADCAST | IFF_POINTOPOINT | IFF_RUNNING | IFF_OACTIVE | IFF_SIMPLEX | IFF_MULTICAST | IFF_ALLMULTI | IFF_NOTRAILERS)
+
+/* Capabilities that interfaces can advertise. */
+#define IFCAP_RXCSUM		0x0001		/* Can offload checksum on RX */
+#define IFCAP_TXCSUM		0x0002		/* Can offload checksum on TX */
+#define IFCAP_NETCONS		0x0004		/* Can be a network console */
+
+#define IFCAP_HWCSUM		(IFCAP_RXCSUM | IFCAP_TXCSUM)
+
+#define	IFQ_MAXLEN			50
+#define	IFNET_SLOWHZ		1			/* Granularity is 1 second */
+
+/* Message format for use in obtaining information about interfaces from getkerninfo and the routing socket */
+struct if_msghdr {
+	u_short	ifm_msglen;			/* To skip over non-understood messages */
+	u_char ifm_version;			/* Future binary compatibility */
+	u_char ifm_type;			/* Message type */
+	int	ifm_addrs;				/* Like rtm_addrs */
+	int	ifm_flags;				/* Value of if_flags */
+	u_short	ifm_index;			/* Index for associated ifp */
+	struct if_data ifm_data;	/* Statistics and other data about if */
+};
+
+/* Message format for use in obtaining information about interface addresses from getkerninfo and the routing socket */
+struct ifa_msghdr {
+	u_short	ifam_msglen;		/* To skip over non-understood messages */
+	u_char ifam_version;		/* Future binary compatibility */
+	u_char ifam_type;			/* Message type */
+	int	ifam_addrs;				/* Like rtm_addrs */
+	int	ifam_flags;				/* Value of ifa_flags */
+	u_short	ifam_index;			/* Index for associated ifp */
+	int	ifam_metric;			/* Value of ifa_metric */
+};
+
+/* Message format for use in obtaining information about multicast addresses from the routing socket */
+struct ifma_msghdr {
+	u_short	ifmam_msglen;		/* To skip over non-understood messages */
+	u_char ifmam_version;		/* Future binary compatibility */
+	u_char ifmam_type;			/* Message type */
+	int	ifmam_addrs;			/* Like rtm_addrs */
+	int	ifmam_flags;			/* Value of ifa_flags */
+	u_short	ifmam_index;		/* Index for associated ifp */
+};
+
+/* Message format announcing the arrival or departure of a network interface. */
+struct if_announcemsghdr {
+	u_short	ifan_msglen;		/* To skip over non-understood messages */
+	u_char ifan_version;		/* Future binary compatibility */
+	u_char ifan_type;			/* Message type */
+	u_short	ifan_index;			/* Index for associated ifp */
+	char ifan_name[IFNAMSIZ]; 	/* If name, e.g. "en0" */
+	u_short	ifan_what;			/* What type of announcement */
+};
+
+#define	IFAN_ARRIVAL		0		/* Interface arrival */
+#define	IFAN_DEPARTURE		1		/* Interface departure */
+
+/*
+ * Interface request structure used for socket
+ * ioctl's.  All interface ioctl's must have parameter
+ * definitions which begin with ifr_name.  The
+ * remainder may be interface specific.
+ */
+struct ifreq {
+	char ifr_name[IFNAMSIZ];		/* if name, e.g. "en0" */
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		short ifru_flags[2];
+		short ifru_index;
+		int	ifru_metric;
+		int	ifru_mtu;
+		int	ifru_phys;
+		int	ifru_media;
+		caddr_t	ifru_data;
+		int	ifru_cap[2];
+	} ifr_ifru;
+
+#define	ifr_addr		ifr_ifru.ifru_addr			/* Address */
+#define	ifr_dstaddr		ifr_ifru.ifru_dstaddr		/* Other end of p-to-p link */
+#define	ifr_broadaddr	ifr_ifru.ifru_broadaddr		/* Broadcast address */
+#define	ifr_netmask		ifr_ifru.ifru_netmask		/* Interface net mask	*/
+#define	ifr_flags		ifr_ifru.ifru_flags[0]		/* Flags */
+#define	ifr_prevflags	ifr_ifru.ifru_flags[1]		/* Flags */
+#define	ifr_metric		ifr_ifru.ifru_metric		/* Metric */
+#define	ifr_mtu			ifr_ifru.ifru_mtu			/* Mtu */
+#define ifr_phys		ifr_ifru.ifru_phys			/* Physical wire */
+#define ifr_media		ifr_ifru.ifru_media			/* Physical media */
+#define	ifr_data		ifr_ifru.ifru_data			/* For use by interface */
+#define	ifr_reqcap		ifr_ifru.ifru_cap[0]		/* Requested capabilities */
+#define	ifr_curcap		ifr_ifru.ifru_cap[1]		/* Current capabilities */
+#define	ifr_index		ifr_ifru.ifru_index			/* Interface index */
+};
+
+struct ifaliasreq {
+	char ifra_name[IFNAMSIZ];	/* if name, e.g. "en0" */
+	struct sockaddr ifra_addr;
+	struct sockaddr ifra_broadaddr;
+	struct sockaddr ifra_mask;
+};
+
+struct ifmediareq {
+	char ifm_name[IFNAMSIZ];	/* If name, e.g. "en0" */
+	int	ifm_current;			/* Current media options */
+	int	ifm_mask;				/* Don't care mask */
+	int	ifm_status;				/* Media status */
+	int	ifm_active;				/* Active options */
+	int	ifm_count;				/* # entries in ifm_ulist array */
+	int	*ifm_ulist;				/* Media words */
+};
+
+/* 
+ * Structure used to retrieve aux status data from interfaces.
+ * Kernel suppliers to this interface should respect the formatting
+ * needed by ifconfig(8): each line starts with a TAB and ends with
+ * a newline.  The canonical example to copy and paste is in if_tun.c.
+ */
+#define	IFSTATMAX			800			/* 10 lines of text */
+struct ifstat {
+	char ifs_name[IFNAMSIZ];			/* if name, e.g. "en0" */
+	char ascii[IFSTATMAX + 1];
+};
+
+/*
+ * Structure used in SIOCGIFCONF request.
+ * Used to retrieve interface configuration
+ * for machine (useful for programs which
+ * must know all networks accessible).
+ */
+struct	ifconf {
+	int	ifc_len;		/* Size of associated buffer */
+	union {
+		caddr_t	ifcu_buf;
+		struct	ifreq *ifcu_req;
+	} ifc_ifcu;
+#define	ifc_buf				ifc_ifcu.ifcu_buf		/* Buffer address */
+#define	ifc_req				ifc_ifcu.ifcu_req		/* Array of structures returned */
+};
+
+
+/* Structure for SIOC[AGD]LIFADDR */
+struct if_laddrreq {
+	char iflr_name[IFNAMSIZ];
+	u_int flags;
+#define	IFLR_PREFIX			0x8000		/* in: prefix given  out: kernel fills id */
+	u_int prefixlen;					/* in/out */
+	struct sockaddr_storage addr;		/* in/out */
+	struct sockaddr_storage dstaddr;	/* out */
+};
+
+struct if_nameindex {
+	u_int if_index;		/* 1, 2, ... */
+	char *if_name;		/* null terminated name: "le0", ... */
+};
+
+unsigned int if_nametoindex(const char *ifname);
+char *if_indextoname(unsigned int ifindex, char *ifname);
+struct if_nameindex *if_nameindex();
+void if_freenameindex(struct if_nameindex *ptr);
+
+#endif
-- 
2.5.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]