Changeset 0e94b979 in mainline for uspace/srv/inet/addrobj.c
- Timestamp:
- 2012-03-08T21:12:44Z (11 years ago)
- Branches:
- lfn, master, serial
- Children:
- 291c792
- Parents:
- a88a6eac
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/inet/addrobj.c
ra88a6eac r0e94b979 36 36 37 37 #include <bitops.h> 38 #include <errno.h> 38 39 #include <fibril_synch.h> 39 40 #include <io/log.h> … … 47 48 static FIBRIL_MUTEX_INITIALIZE(addr_list_lock); 48 49 static LIST_INITIALIZE(addr_list); 50 static sysarg_t addr_id = 0; 49 51 50 52 static uint32_t inet_netmask(int bits) … … 67 69 68 70 link_initialize(&addr->addr_list); 71 fibril_mutex_lock(&addr_list_lock); 72 addr->id = ++addr_id; 73 fibril_mutex_unlock(&addr_list_lock); 69 74 70 75 return addr; … … 73 78 void inet_addrobj_delete(inet_addrobj_t *addr) 74 79 { 80 if (addr->name != NULL) 81 free(addr->name); 75 82 free(addr); 76 83 } … … 123 130 } 124 131 132 /** Find address object matching address @a addr. 133 * 134 * @param id Address object ID 135 * @return Address object 136 */ 137 inet_addrobj_t *inet_addrobj_get_by_id(sysarg_t id) 138 { 139 log_msg(LVL_DEBUG, "inet_addrobj_get_by_id(%zu)", (size_t)id); 140 141 fibril_mutex_lock(&addr_list_lock); 142 143 list_foreach(addr_list, link) { 144 inet_addrobj_t *naddr = list_get_instance(link, 145 inet_addrobj_t, addr_list); 146 147 if (naddr->id == id) { 148 fibril_mutex_unlock(&addr_list_lock); 149 return naddr; 150 } 151 } 152 153 fibril_mutex_unlock(&addr_list_lock); 154 155 return NULL; 156 } 157 125 158 /** Send datagram to directly reachable destination */ 126 159 int inet_addrobj_send_dgram(inet_addrobj_t *addr, inet_dgram_t *dgram, … … 137 170 } 138 171 172 /** Get IDs of all address objects. */ 173 int inet_addrobj_get_id_list(sysarg_t **rid_list, size_t *rcount) 174 { 175 sysarg_t *id_list; 176 size_t count, i; 177 178 fibril_mutex_lock(&addr_list_lock); 179 count = list_count(&addr_list); 180 181 id_list = calloc(count, sizeof(sysarg_t)); 182 if (id_list == NULL) { 183 fibril_mutex_unlock(&addr_list_lock); 184 return ENOMEM; 185 } 186 187 i = 0; 188 list_foreach(addr_list, link) { 189 inet_addrobj_t *addr = list_get_instance(link, 190 inet_addrobj_t, addr_list); 191 192 id_list[i++] = addr->id; 193 } 194 195 fibril_mutex_unlock(&addr_list_lock); 196 197 *rid_list = id_list; 198 *rcount = count; 199 200 return EOK; 201 } 202 139 203 /** @} 140 204 */
Note: See TracChangeset
for help on using the changeset viewer.