drivers/rtc/ds3231.c: fix GCC 4.6 build warnings
[platform/kernel/u-boot.git] / include / net.h
index d5d37b6..ad9afbf 100644 (file)
@@ -48,6 +48,19 @@ typedef void rxhand_f(uchar *pkt, unsigned dport,
                      IPaddr_t sip, unsigned sport,
                      unsigned len);
 
+/**
+ * An incoming ICMP packet handler.
+ * @param type ICMP type
+ * @param code ICMP code
+ * @param dport        destination UDP port
+ * @param sip  source IP address
+ * @param sport        source UDP port
+ * @param pkt  pointer to the ICMP packet data
+ * @param len  packet length
+ */
+typedef void rxhand_icmp_f(unsigned type, unsigned code, unsigned dport,
+               IPaddr_t sip, unsigned sport, uchar *pkt, unsigned len);
+
 /*
  *     A timeout handler.  Called after time interval has expired.
  */
@@ -244,6 +257,7 @@ typedef struct
  * ICMP stuff (just enough to handle (host) redirect messages)
  */
 #define ICMP_ECHO_REPLY                0       /* Echo reply                   */
+#define ICMP_NOT_REACH         3       /* Detination unreachable       */
 #define ICMP_REDIRECT          5       /* Redirect (change route)      */
 #define ICMP_ECHO_REQUEST      8       /* Echo request                 */
 
@@ -251,6 +265,9 @@ typedef struct
 #define ICMP_REDIR_NET         0       /* Redirect Net                 */
 #define ICMP_REDIR_HOST                1       /* Redirect Host                */
 
+/* Codes for NOT_REACH */
+#define ICMP_NOT_REACH_PORT    3       /* Port unreachable             */
+
 typedef struct icmphdr {
        uchar           type;
        uchar           code;
@@ -265,6 +282,7 @@ typedef struct icmphdr {
                        ushort  __unused;
                        ushort  mtu;
                } frag;
+               uchar data[0];
        } un;
 } ICMP_t;
 
@@ -347,8 +365,10 @@ extern int         NetState;               /* Network loop state           */
 
 extern int             NetRestartWrap;         /* Tried all network devices    */
 
-typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
-              TFTPSRV } proto_t;
+enum proto_t {
+       BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
+       TFTPSRV, TFTPPUT
+};
 
 /* from net/net.c */
 extern char    BootFile[128];                  /* Boot File name               */
@@ -374,7 +394,7 @@ extern int NetTimeOffset;                   /* offset time from UTC         */
 #endif
 
 /* Initialize the network adapter */
-extern int     NetLoop(proto_t);
+extern int NetLoop(enum proto_t);
 
 /* Shutdown adapters and cleanup */
 extern void    NetStop(void);
@@ -397,6 +417,7 @@ extern uint NetCksum(uchar *, int);         /* Calculate the checksum       */
 
 /* Set callbacks */
 extern void    NetSetHandler(rxhand_f *);      /* Set RX packet handler        */
+extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
 extern void    NetSetTimeout(ulong, thand_f *);/* Set timeout handler          */
 
 /* Transmit "NetTxPacket" */
@@ -409,6 +430,12 @@ extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, i
 extern void    NetReceive(volatile uchar *, int);
 
 /*
+ * Check if autoload is enabled. If so, use either NFS or TFTP to download
+ * the boot file.
+ */
+void net_auto_load(void);
+
+/*
  * The following functions are a bit ugly, but necessary to deal with
  * alignment restrictions on ARM.
  *