Changeset a35b458 in mainline for uspace/srv/net/inetsrv/ndp.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/ndp.c
r3061bc1 ra35b458 68 68 inet_dgram_t dgram; 69 69 ndp_pdu_encode(packet, &dgram); 70 70 71 71 inet_link_send_dgram6(link, packet->target_hw_addr, &dgram, 72 72 IP_PROTO_ICMPV6, INET6_HOP_LIMIT_MAX, 0); 73 73 74 74 free(dgram.data); 75 75 76 76 return EOK; 77 77 } … … 86 86 { 87 87 log_msg(LOG_DEFAULT, LVL_DEBUG, "ndp_received()"); 88 88 89 89 ndp_packet_t packet; 90 90 errno_t rc = ndp_pdu_decode(dgram, &packet); 91 91 if (rc != EOK) 92 92 return rc; 93 93 94 94 inet_addr_t sender; 95 95 inet_addr_set6(packet.sender_proto_addr, &sender); 96 96 97 97 inet_addr_t target; 98 98 inet_addr_set6(packet.target_proto_addr, &target); 99 99 100 100 inet_addrobj_t *laddr; 101 101 102 102 log_msg(LOG_DEFAULT, LVL_DEBUG, "NDP PDU decoded; opcode: %d", 103 103 packet.opcode); 104 104 105 105 switch (packet.opcode) { 106 106 case ICMPV6_NEIGHBOUR_SOLICITATION: … … 111 111 if (rc != EOK) 112 112 return rc; 113 113 114 114 ndp_packet_t reply; 115 115 116 116 reply.opcode = ICMPV6_NEIGHBOUR_ADVERTISEMENT; 117 117 addr48(laddr->ilink->mac, reply.sender_hw_addr); … … 119 119 addr48(packet.sender_hw_addr, reply.target_hw_addr); 120 120 addr128(packet.sender_proto_addr, reply.target_proto_addr); 121 121 122 122 ndp_send_packet(laddr->ilink, &reply); 123 123 } 124 124 125 125 break; 126 126 case ICMPV6_NEIGHBOUR_ADVERTISEMENT: … … 129 129 return ntrans_add(packet.sender_proto_addr, 130 130 packet.sender_hw_addr); 131 131 132 132 break; 133 133 case ICMPV6_ROUTER_ADVERTISEMENT: … … 136 136 return ENOTSUP; 137 137 } 138 138 139 139 return EOK; 140 140 } … … 159 159 return EOK; 160 160 } 161 161 162 162 errno_t rc = ntrans_lookup(ip_addr, mac_addr); 163 163 if (rc == EOK) 164 164 return EOK; 165 165 166 166 ndp_packet_t packet; 167 167 168 168 packet.opcode = ICMPV6_NEIGHBOUR_SOLICITATION; 169 169 addr48(ilink->mac, packet.sender_hw_addr); … … 172 172 addr48_solicited_node(ip_addr, packet.target_hw_addr); 173 173 ndp_solicited_node_ip(ip_addr, packet.target_proto_addr); 174 174 175 175 rc = ndp_send_packet(ilink, &packet); 176 176 if (rc != EOK) 177 177 return rc; 178 178 179 179 (void) ntrans_wait_timeout(NDP_REQUEST_TIMEOUT); 180 180 181 181 return ntrans_lookup(ip_addr, mac_addr); 182 182 }
Note:
See TracChangeset
for help on using the changeset viewer.