Changes in uspace/srv/net/inetsrv/sroute.c [feeac0d:a1a101d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/sroute.c
rfeeac0d ra1a101d 42 42 #include <stdlib.h> 43 43 #include <str.h> 44 44 45 #include "sroute.h" 45 46 #include "inetsrv.h" 46 47 #include "inet_link.h" 48 #include "inet_util.h" 47 49 48 50 static FIBRIL_MUTEX_INITIALIZE(sroute_list_lock); … … 89 91 } 90 92 91 /** Find static routeobject matching address @a addr.93 /** Find address object matching address @a addr. 92 94 * 93 95 * @param addr Address … … 95 97 inet_sroute_t *inet_sroute_find(inet_addr_t *addr) 96 98 { 97 uint16_t addr_af = inet_addr_get(addr, NULL, NULL); 98 99 inet_sroute_t *best = NULL; 100 uint8_t best_bits = 0; 101 102 fibril_mutex_lock(&sroute_list_lock); 103 104 list_foreach(sroute_list, sroute_list, inet_sroute_t, sroute) { 105 uint8_t dest_bits; 106 uint16_t dest_af = inet_naddr_get(&sroute->dest, NULL, NULL, 107 &dest_bits); 108 109 /* Skip comparison with different address family */ 110 if (addr_af != dest_af) 99 uint32_t mask; 100 inet_sroute_t *best; 101 102 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find(%x)", (unsigned)addr->ipv4); 103 104 fibril_mutex_lock(&sroute_list_lock); 105 106 best = NULL; 107 108 list_foreach(sroute_list, link) { 109 inet_sroute_t *sroute = list_get_instance(link, 110 inet_sroute_t, sroute_list); 111 112 /* Look for the most specific route */ 113 if (best != NULL && best->dest.bits >= sroute->dest.bits) 111 114 continue; 112 113 /* Look for the most specific route */ 114 if ((best != NULL) && (best_bits >= dest_bits)) 115 continue; 116 117 if (inet_naddr_compare_mask(&sroute->dest, addr)) { 118 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: found candidate %p", 115 116 mask = inet_netmask(sroute->dest.bits); 117 if ((sroute->dest.ipv4 & mask) == (addr->ipv4 & mask)) { 118 fibril_mutex_unlock(&sroute_list_lock); 119 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: found %p", 119 120 sroute); 120 121 best = sroute; 122 best_bits = dest_bits; 121 return sroute; 123 122 } 124 123 } 125 126 if (best == NULL) 127 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: Not found"); 128 129 fibril_mutex_unlock(&sroute_list_lock); 130 131 return best; 124 125 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: Not found"); 126 fibril_mutex_unlock(&sroute_list_lock); 127 128 return NULL; 132 129 } 133 130 … … 144 141 fibril_mutex_lock(&sroute_list_lock); 145 142 146 list_foreach(sroute_list, sroute_list, inet_sroute_t, sroute) { 143 list_foreach(sroute_list, link) { 144 inet_sroute_t *sroute = list_get_instance(link, 145 inet_sroute_t, sroute_list); 146 147 147 if (str_cmp(sroute->name, name) == 0) { 148 148 fibril_mutex_unlock(&sroute_list_lock); … … 170 170 fibril_mutex_lock(&sroute_list_lock); 171 171 172 list_foreach(sroute_list, sroute_list, inet_sroute_t, sroute) { 172 list_foreach(sroute_list, link) { 173 inet_sroute_t *sroute = list_get_instance(link, 174 inet_sroute_t, sroute_list); 175 173 176 if (sroute->id == id) { 174 177 fibril_mutex_unlock(&sroute_list_lock); … … 198 201 199 202 i = 0; 200 list_foreach(sroute_list, sroute_list, inet_sroute_t, sroute) { 203 list_foreach(sroute_list, link) { 204 inet_sroute_t *sroute = list_get_instance(link, 205 inet_sroute_t, sroute_list); 206 201 207 id_list[i++] = sroute->id; 202 208 }
Note:
See TracChangeset
for help on using the changeset viewer.