Changes in uspace/srv/net/inetsrv/addrobj.c [30c5d13:a1a101d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/addrobj.c
r30c5d13 ra1a101d 42 42 #include <stdlib.h> 43 43 #include <str.h> 44 #include <net/socket_codes.h> 44 45 45 #include "addrobj.h" 46 46 #include "inetsrv.h" 47 47 #include "inet_link.h" 48 #include " ndp.h"48 #include "inet_util.h" 49 49 50 50 static inet_addrobj_t *inet_addrobj_find_by_name_locked(const char *, inet_link_t *); … … 106 106 /** Find address object matching address @a addr. 107 107 * 108 * @param addr Address 109 * @oaram find iaf_net to find network (using mask), 110 * iaf_addr to find local address (exact match) 111 * 108 * @param addr Address 109 * @oaram find iaf_net to find network (using mask), 110 * iaf_addr to find local address (exact match) 112 111 */ 113 112 inet_addrobj_t *inet_addrobj_find(inet_addr_t *addr, inet_addrobj_find_t find) 114 113 { 115 fibril_mutex_lock(&addr_list_lock); 116 114 uint32_t mask; 115 116 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_addrobj_find(%x)", (unsigned)addr->ipv4); 117 118 fibril_mutex_lock(&addr_list_lock); 119 117 120 list_foreach(addr_list, link) { 118 121 inet_addrobj_t *naddr = list_get_instance(link, 119 122 inet_addrobj_t, addr_list); 120 121 switch (find) { 122 case iaf_net: 123 if (inet_naddr_compare_mask(&naddr->naddr, addr)) { 124 fibril_mutex_unlock(&addr_list_lock); 125 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_addrobj_find: found %p", 126 naddr); 127 return naddr; 128 } 129 break; 130 case iaf_addr: 131 if (inet_naddr_compare(&naddr->naddr, addr)) { 132 fibril_mutex_unlock(&addr_list_lock); 133 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_addrobj_find: found %p", 134 naddr); 135 return naddr; 136 } 137 break; 123 124 mask = inet_netmask(naddr->naddr.bits); 125 if ((naddr->naddr.ipv4 & mask) == (addr->ipv4 & mask)) { 126 fibril_mutex_unlock(&addr_list_lock); 127 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_addrobj_find: found %p", 128 naddr); 129 return naddr; 138 130 } 139 131 } 140 132 141 133 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_addrobj_find: Not found"); 142 134 fibril_mutex_unlock(&addr_list_lock); 143 135 144 136 return NULL; 145 137 } … … 226 218 { 227 219 inet_addr_t lsrc_addr; 228 inet_naddr_addr(&addr->naddr, &lsrc_addr); 229 230 addr32_t lsrc_v4; 231 addr128_t lsrc_v6; 232 uint16_t lsrc_af = inet_addr_get(&lsrc_addr, &lsrc_v4, &lsrc_v6); 233 234 addr32_t ldest_v4; 235 addr128_t ldest_v6; 236 uint16_t ldest_af = inet_addr_get(ldest, &ldest_v4, &ldest_v6); 237 238 if (lsrc_af != ldest_af) 239 return EINVAL; 240 241 int rc; 242 addr48_t ldest_mac; 243 244 switch (ldest_af) { 245 case AF_INET: 246 return inet_link_send_dgram(addr->ilink, lsrc_v4, ldest_v4, 247 dgram, proto, ttl, df); 248 case AF_INET6: 249 /* 250 * Translate local destination IPv6 address. 251 */ 252 rc = ndp_translate(lsrc_v6, ldest_v6, ldest_mac, addr->ilink); 253 if (rc != EOK) 254 return rc; 255 256 return inet_link_send_dgram6(addr->ilink, ldest_mac, dgram, 257 proto, ttl, df); 258 } 259 260 return ENOTSUP; 220 inet_addr_t *ldest_addr; 221 222 lsrc_addr.ipv4 = addr->naddr.ipv4; 223 ldest_addr = &dgram->dest; 224 225 return inet_link_send_dgram(addr->ilink, &lsrc_addr, ldest_addr, dgram, 226 proto, ttl, df); 261 227 } 262 228
Note:
See TracChangeset
for help on using the changeset viewer.