Changes in uspace/srv/net/ethip/arp.c [5a6cc679:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/ethip/arp.c
r5a6cc679 ra35b458 55 55 { 56 56 log_msg(LOG_DEFAULT, LVL_DEBUG, "arp_received()"); 57 57 58 58 arp_eth_packet_t packet; 59 59 errno_t rc = arp_pdu_decode(frame->data, frame->size, &packet); 60 60 if (rc != EOK) 61 61 return; 62 62 63 63 log_msg(LOG_DEFAULT, LVL_DEBUG, "ARP PDU decoded, opcode=%d, tpa=%x", 64 64 packet.opcode, packet.target_proto_addr); 65 65 66 66 inet_addr_t addr; 67 67 inet_addr_set(packet.target_proto_addr, &addr); 68 68 69 69 ethip_link_addr_t *laddr = ethip_nic_addr_find(nic, &addr); 70 70 if (laddr == NULL) 71 71 return; 72 72 73 73 addr32_t laddr_v4; 74 74 ip_ver_t laddr_ver = inet_addr_get(&laddr->addr, &laddr_v4, NULL); 75 75 if (laddr_ver != ip_v4) 76 76 return; 77 77 78 78 log_msg(LOG_DEFAULT, LVL_DEBUG, "Request/reply to my address"); 79 79 80 80 (void) atrans_add(packet.sender_proto_addr, 81 81 packet.sender_hw_addr); 82 82 83 83 if (packet.opcode == aop_request) { 84 84 arp_eth_packet_t reply; 85 85 86 86 reply.opcode = aop_reply; 87 87 addr48(nic->mac_addr, reply.sender_hw_addr); … … 89 89 addr48(packet.sender_hw_addr, reply.target_hw_addr); 90 90 reply.target_proto_addr = packet.sender_proto_addr; 91 91 92 92 arp_send_packet(nic, &reply); 93 93 } … … 106 106 if (rc == EOK) 107 107 return EOK; 108 108 109 109 arp_eth_packet_t packet; 110 110 111 111 packet.opcode = aop_request; 112 112 addr48(nic->mac_addr, packet.sender_hw_addr); … … 114 114 addr48(addr48_broadcast, packet.target_hw_addr); 115 115 packet.target_proto_addr = ip_addr; 116 116 117 117 rc = arp_send_packet(nic, &packet); 118 118 if (rc != EOK) 119 119 return rc; 120 120 121 121 return atrans_lookup_timeout(ip_addr, ARP_REQUEST_TIMEOUT, mac_addr); 122 122 }
Note:
See TracChangeset
for help on using the changeset viewer.