summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/net.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/net.h b/include/net.h
index d5d37b6..d7ff068 100644
--- a/include/net.h
+++ b/include/net.h
@@ -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;
@@ -397,6 +415,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" */