uIP 1.0
|
Протокол разрешения адреса (Address Resolution Protocol, ARP) используется для определения соответствия между адресами IP и адресами уровня линка, такими как адреса Ethernet MAC. Подробнее...
Структуры данных | |
struct | uip_eth_hdr |
Заголовок Ethernet. Подробнее... | |
Файлы | |
файл | uip_arp.h |
Макросы и определения для модуля ARP. | |
файл | uip_arp.c |
Реализация ARP Address Resolution Protocol. | |
Функции | |
void | uip_arp_init (void) |
Инициализирует модуль ARP. | |
void | uip_arp_arpin (void) |
Обработка ARP для приходящих пакетов IP. | |
void | uip_arp_out (void) |
Ожидается наличие присоединенного заголовка Ethernet к исходящему пакету IP, и делается проверка, нужно или нет отправить запрос ARP. | |
void | uip_arp_timer (void) |
Функция периодической обработки ARP. |
Протокол разрешения адреса (Address Resolution Protocol, ARP) используется для определения соответствия между адресами IP и адресами уровня линка, такими как адреса Ethernet MAC.
ARP использует щироковещательные запросы (broadcast), чтобы запросить адрес уровня линка для известного адреса IP, и хост, который с конфигурирован на тот адрес IP, которому предназначен запрос, ответит на него своим адресом уровня линка (т. е. передаст свой MAC-адрес).
void uip_arp_arpin | ( | void | ) |
Обработка ARP для приходящих пакетов IP.
Эта функция должна вызваться драйвером устройства, когда принят пакет IP. Функция проверит, есть ли адрес в кэше (в таблице) ARP, и если это так, то запись ARP будет обновлена в кэше (в таблице ARP). Если запись ARP в кэше не найдена, то будет создана новая запись.
Эта функция подразумевает наличие в буфере uip_buf[] пакета IP с предварительно ожидаемым заголовком Ethernet, и длина пакета должна быть в глобальной переменной uip_len. Обработка ARP для приходящих пакетов ARP.
Эта функция должна быть вызвана драйвером устройства, когда принят пакет ARP. Функция будет работать по-разному, в зависимости от типа пакета ARP: если это ответ на запрос (ARP reply), который был отослан ранее, то кэш ARP будет заполнен значением из ответа. Если входящий ARP пакет является запросом (ARP request) на наш адрес IP, то будет создан пакет ответа (ARP reply) и помещен в буфер uip_buf[].
Когда функция делает возврат, значение глобальной переменной uip_len показывает, должен или нет драйвер устройства отправить пакет. Если uip_len равна 0, то пакет отправлять не нужно. Если uip_len не равна 0, то она содержит длину исходящего пакета, который находится в буфере uip_buf[].
Эта функция подразумевает на входе наличия пакета ARP с предварительно ожидаемым заголовком Ethernet в буфере uip_buf[], и длину пакета в глобальной переменной uip_len.
См. определение в файле uip_arp.c строка 275
Перекрестные ссылки HTONS, uip_ipaddr_cmp и uip_len.
void uip_arp_out | ( | void | ) |
Ожидается наличие присоединенного заголовка Ethernet к исходящему пакету IP, и делается проверка, нужно или нет отправить запрос ARP.
Эта функция должна быть вызвана перед отправкой пакета IP. Функция проверяет адрес назначения (destination IP) пакета IP, чтобы посмотреть, какой адрес Ethernet MAC должен быть использован в качестве адреса назначения (destination MAC) в сети Ethernet.
Если адрес destination IP находится в локальной сети (это определяется путем операции логического И над сетевой маской и нашим адресом IP), функция проверит кэш ARP, чтобы посмотреть имеется ли в ней запись для адреса destination IP. Если есть, то функция вернет присоединенный заголовок Ethernet. Если в кэше ARP не найдена запись с адресом destination IP, то данные пакета в буфере uip_buf[] будут заменены на пакет запроса (ARP request) на адрес destination IP. Пакет IP отбрасывается, и подразумевается, что протоколы более высокого уровня (например TCP) по необходимости сделают повторную передачу отброшенного пакета.
Если адрес destination IP находится не в локальной сети, вместо этого будет использоваться адрес IP шлюза по умолчанию (default router).
Когда функция делает возврат, в буфере uip_buf[] находится пакет, и длина пакета находится в глобальной переменной uip_len.
См. определение в файле uip_arp.c строка 350
Перекрестные ссылки HTONS, uip_appdata, UIP_ARPTAB_SIZE, uip_buf, uip_ipaddr_cmp, uip_ipaddr_copy, uip_ipaddr_maskcmp, uip_len и UIP_LLH_LEN.
void uip_arp_timer | ( | void | ) |
Функция периодической обработки ARP.
Эта функция выполняет периодические обработки по таймеру для модуля ARP, и она должна вызываться с регулярными интервалами. Рекомендованный интервал между вызовами 10 секунд.
См. определение в файле uip_arp.c строка 145
Перекрестные ссылки UIP_ARP_MAXAGE и UIP_ARPTAB_SIZE.