diff options
Diffstat (limited to 'system/alpha/h/ip.h')
-rw-r--r-- | system/alpha/h/ip.h | 192 |
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 */ |