summaryrefslogtreecommitdiff
path: root/include/net.h
diff options
context:
space:
mode:
authorwdenk <wdenk>2004-04-15 21:48:45 +0000
committerwdenk <wdenk>2004-04-15 21:48:45 +0000
commita3d991bd0da8b9fb9dbf2c7481091c3d082b9b13 (patch)
treec474375dc1cc812e006921ab2ad122b21923e512 /include/net.h
parenta6ab4bf978a3d5a52a47bbd259b7eb4c860ebd0c (diff)
Patches by Pantelis Antoniou, 30 Mar 2004:
add networking support for VLANs (802.1q), and CDP (Cisco Discovery Protocol)
Diffstat (limited to 'include/net.h')
-rw-r--r--include/net.h52
1 files changed, 49 insertions, 3 deletions
diff --git a/include/net.h b/include/net.h
index 1b2b347f86a..68f5fea3e3e 100644
--- a/include/net.h
+++ b/include/net.h
@@ -110,7 +110,11 @@ struct eth_device {
extern int eth_initialize(bd_t *bis); /* Initialize network subsystem */
extern int eth_register(struct eth_device* dev);/* Register network device */
extern void eth_try_another(int first_restart); /* Change the device */
+#ifdef CONFIG_NET_MULTI
+extern void eth_set_current(void); /* set nterface to ethcur var. */
+#endif
extern struct eth_device *eth_get_dev(void); /* get the current device MAC */
+extern int eth_get_dev_index (void); /* get the device index */
extern void eth_set_enetaddr(int num, char* a); /* Set new MAC address */
extern int eth_init(bd_t *bis); /* Initialize the device */
@@ -143,9 +147,24 @@ typedef struct {
#define ETHER_HDR_SIZE 14 /* Ethernet header size */
#define E802_HDR_SIZE 22 /* 802 ethernet header size */
+
+/*
+ * Ethernet header
+ */
+typedef struct {
+ uchar vet_dest[6]; /* Destination node */
+ uchar vet_src[6]; /* Source node */
+ ushort vet_vlan_type; /* PROT_VLAN */
+ ushort vet_tag; /* TAG of VLAN */
+ ushort vet_type; /* protocol type */
+} VLAN_Ethernet_t;
+
+#define VLAN_ETHER_HDR_SIZE 18 /* VLAN Ethernet header size */
+
#define PROT_IP 0x0800 /* IP protocol */
#define PROT_ARP 0x0806 /* IP ARP protocol */
#define PROT_RARP 0x8035 /* IP ARP protocol */
+#define PROT_VLAN 0x8100 /* IEEE 802.1q protocol */
#define IPPROTO_ICMP 1 /* Internet Control Message Protocol */
#define IPPROTO_UDP 17 /* User Datagram Protocol */
@@ -296,6 +315,15 @@ extern int NetRxPktLen; /* Current rx packet length */
extern unsigned NetIPID; /* IP ID (counting) */
extern uchar NetBcastAddr[6]; /* Ethernet boardcast address */
+#define VLAN_NONE 4095 /* untagged */
+#define VLAN_IDMASK 0x0fff /* mask of valid vlan id */
+extern ushort NetOurVLAN; /* Our VLAN */
+extern ushort NetOurNativeVLAN; /* Our Native VLAN */
+
+extern uchar NetCDPAddr[6]; /* Ethernet CDP address */
+extern ushort CDPNativeVLAN; /* CDP returned native VLAN */
+extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */
+
extern int NetState; /* Network loop state */
#define NETLOOP_CONTINUE 1
#define NETLOOP_RESTART 2
@@ -306,7 +334,7 @@ extern int NetState; /* Network loop state */
extern int NetRestartWrap; /* Tried all network devices */
#endif
-typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS } proto_t;
+typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP } proto_t;
/* from net/net.c */
extern char BootFile[128]; /* Boot File name */
@@ -315,6 +343,12 @@ extern char BootFile[128]; /* Boot File name */
extern IPaddr_t NetPingIP; /* the ip address to ping */
#endif
+#if (CONFIG_COMMANDS & CFG_CMD_CDP)
+/* when CDP completes these hold the return values */
+extern ushort CDPNativeVLAN;
+extern ushort CDPApplianceVLAN;
+#endif
+
/* Initialize the network adapter */
extern int NetLoop(proto_t);
@@ -324,8 +358,11 @@ extern void NetStop(void);
/* Load failed. Start again. */
extern void NetStartAgain(void);
-/* Set ethernet header */
-extern void NetSetEther(volatile uchar *, uchar *, uint);
+/* Get size of the ethernet header when we send */
+extern int NetEthHdrSize(void);
+
+/* Set ethernet header; returns the size of the header */
+extern int NetSetEther(volatile uchar *, uchar *, uint);
/* Set IP header */
extern void NetSetIP(volatile uchar *, IPaddr_t, int, int, int);
@@ -397,9 +434,18 @@ extern void ip_to_string (IPaddr_t x, char *s);
/* Convert a string to ip address */
extern IPaddr_t string_to_ip(char *s);
+/* Convert a VLAN id to a string */
+extern void VLAN_to_string (ushort x, char *s);
+
+/* Convert a string to a vlan id */
+extern ushort string_to_VLAN(char *s);
+
/* read an IP address from a environment variable */
extern IPaddr_t getenv_IPaddr (char *);
+/* read a VLAN id from an environment variable */
+extern ushort getenv_VLAN(char *);
+
/* copy a filename (allow for "..." notation, limit length) */
extern void copy_filename (uchar *dst, uchar *src, int size);