summaryrefslogtreecommitdiff
path: root/system/alpha/h/ip.h
diff options
context:
space:
mode:
Diffstat (limited to 'system/alpha/h/ip.h')
-rw-r--r--system/alpha/h/ip.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/system/alpha/h/ip.h b/system/alpha/h/ip.h
new file mode 100644
index 000000000..c4ccc5de3
--- /dev/null
+++ b/system/alpha/h/ip.h
@@ -0,0 +1,192 @@
+#ifndef __IP_H_LOADED
+#define __IP_H_LOADED
+/*****************************************************************************
+
+ Copyright © 1993, 1994 Digital Equipment Corporation,
+ Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the copyright notice and this permission notice appear in all copies
+of software and supporting documentation, and that the name of Digital not
+be used in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. Digital grants this permission
+provided that you prominently mark, as not part of the original, any
+modifications made to this software or documentation.
+
+Digital Equipment Corporation disclaims all warranties and/or guarantees
+with regard to this software, including all implied warranties of fitness for
+a particular purpose and merchantability, and makes no representations
+regarding the use of, or the results of the use of, the software and
+documentation in terms of correctness, accuracy, reliability, currentness or
+otherwise; and you rely on the software, documentation and results solely at
+your own risk.
+
+******************************************************************************/
+
+/*
+ * $Id: ip.h,v 1.1.1.1 1997/10/30 23:27:15 verghese Exp $
+ */
+
+/*
+ * MODULE DESCRIPTION:
+ *
+ * IP protocol interface for EB64 monitor
+ *
+ * HISTORY:
+ *
+ * $Log: ip.h,v $
+ * Revision 1.1.1.1 1997/10/30 23:27:15 verghese
+ * current 10/29/97
+ *
+ * Revision 1.5 1994/08/05 20:13:47 fdh
+ * Updated Copyright header and RCS $Id: identifier.
+ *
+ * Revision 1.4 1994/06/28 20:08:21 fdh
+ * Modified filenames and build precedure to fit into a FAT filesystem.
+ *
+ * Revision 1.3 1994/06/20 14:18:59 fdh
+ * Fixup header file preprocessor #include conditionals.
+ *
+ * Revision 1.2 1994/01/21 09:45:59 rusling
+ * Added #ifdef <filename>_H around the module.
+ * Additionally, any included files are not ifdef'd
+ * *before* they're included (ie address.h).
+ *
+ * Revision 1.1 1993/08/06 10:30:54 berent
+ * Initial revision
+ *
+ *
+ */
+
+#include "address.h"
+
+
+/* ip_init - initialise ip protocol for an ethernet device
+ *
+ * Argument:
+ * device_no - device for which IP is to be initialised.
+ */
+extern void ip_init(int device_no);
+
+/* ip_set_device_addr - tells ip a device's ip address.
+ *
+ * Arguments:
+ * device_no - device number
+ * ip - ip address
+ */
+extern void ip_set_device_addr(int device_no,ip_addr ip);
+
+/*
+ * Prototype for packet processing functions
+ *
+ * Arguments to packet processing functions:
+ * protocol_data - protocol data passed to module when protocol registered
+ * device_no - device on which packet was received;
+ * packet - packet, with IP header removed;
+ * size - size of packet;
+ * source - source IP address of packet;
+ * destination - IP address to which the packet was addressed; this is needed by UDP.
+ * frame_buffer - original buffer containing packet.
+ * balance_buffer- buffer returned to maintain buffer balance.
+ *
+ * DESCRIPTION:
+ * The packet processing functions process a received protocol packet. To avoid
+ * buffer shortages they are always passed the buffer containing the packet in
+ * frame_buffer. They must return either this buffer, or another buffer, in
+ * balance buffer. The ip module will never access frame_buffer after
+ * calling a packet processing function; and the protocol modules must not
+ * access the returned balance_buffer after returning from this function.
+ *
+ */
+typedef void (* ip_packet_handler)(void * protocol_data,
+ int device_no,
+ unsigned char * packet,
+ int size,
+ ip_addr source,
+ ip_addr destination,
+ unsigned char frame_buffer[ETHER_BUFFER_SIZE],
+ unsigned char ** balance_buffer);
+
+/* ip_register_protocol - registers an IP protocol to be recognised in received frames by this module
+ *
+ * Arguments:
+ *
+ * device_no - device number on which this protocol can be received
+ * protocol_id - protocol id to be recognised by this module
+ * processing_function - function to process received packets; if NULL cancels registration of protocol.
+ * protocol_data - arbitrary data to be passed back when a packet is received
+ *
+ * Returned value:
+ * TRUE - protocol registered
+ * FALSE - unable to register protocol
+ */
+extern int ip_register_protocol(int device_no,
+ ip_protocol_id protocol_id,
+ ip_packet_handler processing_function,
+ void * protocol_data);
+
+/* ip_write - sends a packet on an IP network
+ *
+ * Arguments:
+ *
+ * device_no - device on which to send the packet
+ * packet - pointer to data packet to be sent
+ * destination - destination address for packet
+ * protocol_id - protocol id for packet
+ * size - size of packet
+ * frame_buffer - buffer containing packet
+ * balance_buffer - buffer returned to maintain buffer balance
+ *
+ * Return values:
+ *
+ * TRUE - send successfull
+ * FALSE - Error occured
+ *
+ * DESCRIPTION:
+ * This function writes an ip data packet to the device To maintain the caller's
+ * pool of buffers the driver must give the caller an unused buffer (balance_buffer)
+ * in return for the buffer containing the frame to be transmitted.
+ *
+ * If the send succeeds then frame_buffer must not be accessed by the caller after this
+ * call. If the send can't be queued then frame_buffer will remain valid and
+ * the returned value of balance_buffer is undefined and must not be used.
+ *
+ */
+extern int ip_write(int device_no,
+ unsigned char * packet,
+ ip_addr destination,
+ ip_protocol_id protocol_id,
+ int size,
+ unsigned char frame_buffer[ETHER_BUFFER_SIZE],
+ unsigned char ** balance_buffer);
+
+
+/* ip_data_offset - returns the offset at which ip data should be placed in a new ethernet frame
+ *
+ * Return value:
+ * Offset.
+ */
+extern int ip_data_offset(void);
+
+/* ip_get_address - gets the address that will be used as the source address of transmitted packets.
+ *
+ * Arguments:
+ * device_no - device number of device on which packet is to be sent.
+ * ip - returned ip address
+ *
+ * Note:
+ * This function exists so that UDP can calculate header checksums.
+ */
+extern void ip_get_device_address(int device_no, ip_addr ip);
+
+/* ip_printaddress - utility to print an ethernet address
+ *
+ * Argument:
+ * address - IP address to be printed
+ */
+extern void ip_printaddress(mac_addr address);
+
+#endif /* __IP_H_LOADED */