Changeset 98abd40 in mainline for uspace/srv/net/inetsrv/sroute.c
- Timestamp:
- 2013-07-06T21:57:22Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c8bb1633, cdc8a391
- Parents:
- b8e72fd1 (diff), 507c6f3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/sroute.c
rb8e72fd1 r98abd40 42 42 #include <stdlib.h> 43 43 #include <str.h> 44 45 44 #include "sroute.h" 46 45 #include "inetsrv.h" 47 46 #include "inet_link.h" 48 #include "inet_util.h"49 47 50 48 static FIBRIL_MUTEX_INITIALIZE(sroute_list_lock); … … 97 95 inet_sroute_t *inet_sroute_find(inet_addr_t *addr) 98 96 { 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 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, link) { 105 inet_sroute_t *sroute = list_get_instance(link, 106 inet_sroute_t, sroute_list); 107 108 uint8_t dest_bits; 109 uint16_t dest_af = inet_naddr_get(&sroute->dest, NULL, NULL, 110 &dest_bits); 111 112 /* Skip comparison with different address family */ 113 if (addr_af != dest_af) 114 continue; 115 112 116 /* Look for the most specific route */ 113 if ( best != NULL && best->dest.bits >= sroute->dest.bits)117 if ((best != NULL) && (best_bits >= dest_bits)) 114 118 continue; 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 if (inet_naddr_compare_mask(&sroute->dest, addr)) { 121 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: found candidate %p", 120 122 sroute); 121 return sroute; 123 124 best = sroute; 125 best_bits = dest_bits; 122 126 } 123 127 } 124 125 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: Not found"); 126 fibril_mutex_unlock(&sroute_list_lock); 127 128 return NULL; 128 129 if (best == NULL) 130 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: Not found"); 131 132 fibril_mutex_unlock(&sroute_list_lock); 133 134 return best; 129 135 } 130 136
Note:
See TracChangeset
for help on using the changeset viewer.