uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/uip/uip_arp.h
См. документацию.
00001 /**
00002  * \addtogroup uip
00003  * @{
00004  */
00005 
00006 /**
00007  * \addtogroup uiparp
00008  * @{
00009  */
00010  
00011 /**
00012  * \file
00013  * Макросы и определения для модуля ARP.
00014  * \author Adam Dunkels <adam@dunkels.com>
00015  */
00016   
00017 
00018 /*
00019  * Copyright (c) 2001-2003, Adam Dunkels.
00020  * Все права зарезервированы. *
00021  * Повторное распространение, использование в исходном и двоичном виде,
00022  * с модификацией или без - разрешается, если выполняются следующие
00023  * условия:
00024  * 1. Распространение исходного кода должно сохранить вышеуказанную пометку
00025  *    копирайта, этот список условий и следующую правовую оговорку.
00026  * 2. Распространение исходного кода должно сохранить вышеуказанную пометку
00027  *    копирайта, этот список условий и следующую правовую оговорку в
00028  *    документации и/или других материалах, которые будут предоставлены
00029  *    вместе с распространяемыми материалами.
00030  * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть
00031  *    продукты, написанные с использованием этого программного обеспечения
00032  *    без специального на то разрешения.
00033  *
00034  * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ
00035  * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ,
00036  * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ
00037  * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН
00038  * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ
00039  * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ
00040  * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ;
00041  * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ,
00042  * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ
00043  * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ
00044  * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ
00045  * ТАКОГО ПОВРЕЖДЕНИЯ.
00046  *
00047  * Этот файл является частью стека uIP TCP/IP.
00048  *
00049  * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $
00050  *
00051  */
00052 
00053 #ifndef __UIP_ARP_H__
00054 #define __UIP_ARP_H__
00055 
00056 #include "uip.h"
00057 
00058 
00059 extern struct uip_eth_addr uip_ethaddr;
00060 
00061 /**
00062  * Заголовок Ethernet.
00063  */
00064 struct uip_eth_hdr {
00065   struct uip_eth_addr dest;
00066   struct uip_eth_addr src;
00067   u16_t type;
00068 };
00069 
00070 #define UIP_ETHTYPE_ARP 0x0806
00071 #define UIP_ETHTYPE_IP  0x0800
00072 #define UIP_ETHTYPE_IP6 0x86dd
00073 
00074 
00075 /* Функция uip_arp_init() должна быть вызвана перед любыми вызовами
00076    всех других функций ARP. */
00077 void uip_arp_init(void);
00078 
00079 /* Функция uip_arp_ipin() должна быть вызвана всякий раз, когда пакет
00080    IP поступает через из Ethernet. Эта функция обновляет таблицу ARP
00081    или вставляет в неё новую привязку, если в таблице её пока нет.
00082    Функция подразумевает, что пакет IP с заголовком Ethernet
00083    находится в буфере uip_buf, и длина пакета находится в переменной
00084    uip_len. */
00085 /*void uip_arp_ipin(void);*/
00086 #define uip_arp_ipin()
00087 
00088 /* Функция uip_arp_arpin() должна быть вызвана, когда драйвером
00089    Ethernet был принят пакет ARP. Эта функция также подразумевает,
00090    что фрейм Ethernet находится в буфере uip_buf. Когда функция
00091    uip_arp_arpin() делает возврат, содержимое буфера uip_buf
00092    должно быть отправлено через Ethernet, если значение переменной
00093    uip_len > 0. */
00094 void uip_arp_arpin(void);
00095 
00096 /* Функция uip_arp_out() должна быть вызвана, когда пакет IP должнен
00097    быть отправлен через Ethernet. Эта функция создает заголовок
00098    Ethernet перед заголовком IP в буфере uip_buf. Заголовок Ethernet
00099    будет иметь корректный заполненный адрес назначения Ethernet MAC, 
00100    если в таблице ARP имеется првязка по MAC к адресу назначения IP
00101    (или IP адреса роутера по умолчанию). Если такая запись привязки
00102    в таблице ARP не найдена, то пакет IP будет перезаписан запросом
00103    ARP и мы полагаемся на ретрансмит TCP для пакета, который был
00104    перезаписан. В любом случае переменная uip_len содержит длину
00105    фрейма Ethernet, который должен быть передан. */
00106 void uip_arp_out(void);
00107 
00108 /* Функция uip_arp_timer() должна быть вызвана каждые 10 секунд. Она
00109    отвечает за сброс старых записей в таблице ARP. */
00110 void uip_arp_timer(void);
00111 
00112 /** @} */
00113 
00114 /**
00115  * \addtogroup uipconffunc
00116  * @{
00117  */
00118 
00119 
00120 /**
00121  * Указывает адрес Ethernet MAC.
00122  *
00123  * Коду ARP нужно знать MAC-адрес карты Ethernet, чтобы можно было
00124  * отвечать на запросы ARP и генерировать рабочие заголовки Ethernet.
00125  *
00126  * \note Этот макрос только указывает адрес Ethernet MAC для кода ARP.
00127  * Его нельзя использовать для изменения MAC-адреса карты Ethernet.
00128  *
00129  * \param eaddr Указатель на структуру uip_eth_addr, содержащую
00130  * адрес Ethernet MAC карты Ethernet.
00131  *
00132  * \hideinitializer
00133  */
00134 #define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
00135                               uip_ethaddr.addr[1] = eaddr.addr[1];\
00136                               uip_ethaddr.addr[2] = eaddr.addr[2];\
00137                               uip_ethaddr.addr[3] = eaddr.addr[3];\
00138                               uip_ethaddr.addr[4] = eaddr.addr[4];\
00139                               uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)
00140 
00141 /** @} */
00142 /** @} */
00143 
00144 #endif /* __UIP_ARP_H__ */