Lines Matching refs:netif
72 #include "lwip/netif.h"
74 #include "netif/etharp.h"
87 /** Pseudo random macro based on netif informations.
90 #define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \
91 ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \
92 ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \
93 ((u32_t)((netif->hwaddr[4]) & 0xff))) + \
94 (netif->autoip?netif->autoip->tried_llipaddr:0))
102 #define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \
103 htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \
104 ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8)))
108 static void autoip_handle_arp_conflict(struct netif *netif);
111 static void autoip_create_addr(struct netif *netif, ip_addr_t *ipaddr);
114 static err_t autoip_arp_probe(struct netif *netif);
117 static err_t autoip_arp_announce(struct netif *netif);
120 static err_t autoip_bind(struct netif *netif);
123 static void autoip_start_probing(struct netif *netif);
129 * @param netif the netif for which to set the struct autoip
133 autoip_set_struct(struct netif *netif, struct autoip *autoip)
135 LWIP_ASSERT("netif != NULL", netif != NULL);
137 LWIP_ASSERT("netif already has a struct autoip set", netif->autoip == NULL);
142 netif->autoip = autoip;
147 * @param netif The netif under AutoIP control
150 autoip_restart(struct netif *netif)
152 netif->autoip->tried_llipaddr++;
153 autoip_start(netif);
160 autoip_handle_arp_conflict(struct netif *netif)
166 if (netif->autoip->lastconflict > 0) {
174 autoip_restart(netif);
178 autoip_arp_announce(netif);
179 netif->autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND;
185 autoip_restart(netif);
192 * @param netif network interface on which create the IP-Address
196 autoip_create_addr(struct netif *netif, ip_addr_t *ipaddr)
202 u32_t addr = ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif));
203 addr += netif->autoip->tried_llipaddr;
219 (u16_t)(netif->autoip->tried_llipaddr), ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr),
226 * @param netif network interface used to send the probe
229 autoip_arp_probe(struct netif *netif)
231 return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast,
232 (struct eth_addr *)netif->hwaddr, IP_ADDR_ANY, ðzero,
233 &netif->autoip->llipaddr, ARP_REQUEST);
239 * @param netif network interface used to send the announce
242 autoip_arp_announce(struct netif *netif)
244 return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast,
245 (struct eth_addr *)netif->hwaddr, &netif->autoip->llipaddr, ðzero,
246 &netif->autoip->llipaddr, ARP_REQUEST);
252 * @param netif network interface to configure with current LL IP-Address
255 autoip_bind(struct netif *netif)
257 struct autoip *autoip = netif->autoip;
261 ("autoip_bind(netif=%p) %c%c%"U16_F" %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
262 (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num,
269 netif_set_ipaddr(netif, &autoip->llipaddr);
270 netif_set_netmask(netif, &sn_mask);
271 netif_set_gw(netif, &gw_addr);
274 netif_set_up(netif);
282 * @param netif network interface on which start the AutoIP client
285 autoip_start(struct netif *netif)
287 struct autoip *autoip = netif->autoip;
290 if (netif_is_up(netif)) {
291 netif_set_down(netif);
297 ip_addr_set_zero(&netif->ip_addr);
298 ip_addr_set_zero(&netif->netmask);
299 ip_addr_set_zero(&netif->gw);
302 ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0],
303 netif->name[1], (u16_t)netif->num));
315 /* store this AutoIP client in the netif */
316 netif->autoip = autoip;
326 autoip_create_addr(netif, &(autoip->llipaddr));
327 autoip_start_probing(netif);
333 autoip_start_probing(struct netif *netif)
335 struct autoip *autoip = netif->autoip;
341 ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr),
342 ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr)));
348 autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND));
367 autoip_network_changed(struct netif *netif)
369 if (netif->autoip && netif->autoip->state != AUTOIP_STATE_OFF) {
370 netif_set_down(netif);
371 autoip_start_probing(netif);
378 * @param netif network interface on which stop the AutoIP client
381 autoip_stop(struct netif *netif)
383 netif->autoip->state = AUTOIP_STATE_OFF;
384 netif_set_down(netif);
394 struct netif *netif = netif_list;
395 /* loop through netif's */
396 while (netif != NULL) {
398 if (netif->autoip != NULL) {
399 if (netif->autoip->lastconflict > 0) {
400 netif->autoip->lastconflict--;
405 (u16_t)(netif->autoip->state), netif->autoip->ttw));
407 switch(netif->autoip->state) {
409 if (netif->autoip->ttw > 0) {
410 netif->autoip->ttw--;
412 if (netif->autoip->sent_num >= PROBE_NUM) {
413 netif->autoip->state = AUTOIP_STATE_ANNOUNCING;
414 netif->autoip->sent_num = 0;
415 netif->autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND;
418 ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr),
419 ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr)));
421 autoip_arp_probe(netif);
424 netif->autoip->sent_num++;
426 netif->autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) %
434 if (netif->autoip->ttw > 0) {
435 netif->autoip->ttw--;
437 if (netif->autoip->sent_num == 0) {
444 autoip_bind(netif);
446 autoip_arp_announce(netif);
450 netif->autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND;
451 netif->autoip->sent_num++;
453 if (netif->autoip->sent_num >= ANNOUNCE_NUM) {
454 netif->autoip->state = AUTOIP_STATE_BOUND;
455 netif->autoip->sent_num = 0;
456 netif->autoip->ttw = 0;
459 ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr),
460 ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr)));
467 netif = netif->next;
474 * @param netif network interface to use for autoip processing
478 autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr)
481 if ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) {
482 /* when ip.src == llipaddr && hw.src != netif->hwaddr
484 * when probing ip.dst == llipaddr && hw.src != netif->hwaddr
489 ETHADDR16_COPY(netifaddr.addr, netif->hwaddr);
497 if ((netif->autoip->state == AUTOIP_STATE_PROBING) ||
498 ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) &&
499 (netif->autoip->sent_num == 0))) {
506 if ((ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr)) ||
507 (ip_addr_cmp(&dipaddr, &netif->autoip->llipaddr) &&
511 autoip_restart(netif);
518 if (ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr) &&
522 autoip_handle_arp_conflict(netif);