Changes in uspace/srv/net/ethip/atrans.c [5c2e8d0:feeac0d] in mainline
- File:
-
- 1 edited
-
uspace/srv/net/ethip/atrans.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/ethip/atrans.c
r5c2e8d0 rfeeac0d 103 103 } 104 104 105 static int atrans_lookup_locked(addr32_t ip_addr, addr48_t mac_addr)105 int atrans_lookup(addr32_t ip_addr, addr48_t mac_addr) 106 106 { 107 fibril_mutex_lock(&atrans_list_lock); 107 108 ethip_atrans_t *atrans = atrans_find(ip_addr); 108 if (atrans == NULL) 109 if (atrans == NULL) { 110 fibril_mutex_unlock(&atrans_list_lock); 109 111 return ENOENT; 110 112 } 113 114 fibril_mutex_unlock(&atrans_list_lock); 111 115 addr48(atrans->mac_addr, mac_addr); 112 116 return EOK; 113 117 } 114 118 115 int atrans_ lookup(addr32_t ip_addr, addr48_t mac_addr)119 int atrans_wait_timeout(suseconds_t timeout) 116 120 { 117 int rc;118 119 121 fibril_mutex_lock(&atrans_list_lock); 120 rc = atrans_lookup_locked(ip_addr, mac_addr); 122 int rc = fibril_condvar_wait_timeout(&atrans_cv, &atrans_list_lock, 123 timeout); 121 124 fibril_mutex_unlock(&atrans_list_lock); 122 123 return rc; 124 } 125 126 static void atrans_lookup_timeout_handler(void *arg) 127 { 128 bool *timedout = (bool *)arg; 129 130 fibril_mutex_lock(&atrans_list_lock); 131 *timedout = true; 132 fibril_mutex_unlock(&atrans_list_lock); 133 fibril_condvar_broadcast(&atrans_cv); 134 } 135 136 int atrans_lookup_timeout(addr32_t ip_addr, suseconds_t timeout, 137 addr48_t mac_addr) 138 { 139 fibril_timer_t *t; 140 bool timedout; 141 int rc; 142 143 t = fibril_timer_create(NULL); 144 if (t == NULL) 145 return ENOMEM; 146 147 timedout = false; 148 fibril_timer_set(t, timeout, atrans_lookup_timeout_handler, &timedout); 149 150 fibril_mutex_lock(&atrans_list_lock); 151 152 while ((rc = atrans_lookup_locked(ip_addr, mac_addr)) == ENOENT && 153 !timedout) { 154 fibril_condvar_wait(&atrans_cv, &atrans_list_lock); 155 } 156 157 fibril_mutex_unlock(&atrans_list_lock); 158 (void) fibril_timer_clear(t); 159 fibril_timer_destroy(t); 160 125 161 126 return rc; 162 127 }
Note:
See TracChangeset
for help on using the changeset viewer.
