157,14 → 157,14 |
// an existing device? |
device = eth_devices_find( & eth_globals.devices, device_id ); |
if( device ){ |
if( device->service == service ){ |
if( device->service != service ){ |
printf( "\nDevice %d already exists", device->device_id ); |
rwlock_write_unlock( & eth_globals.devices_lock ); |
return EEXIST; |
}else{ |
// update mtu |
device->mtu = mtu; |
rwlock_write_unlock( & eth_globals.devices_lock ); |
return EOK; |
}else{ |
rwlock_write_unlock( & eth_globals.devices_lock ); |
return EEXIST; |
printf( "\nDevice %d already exists:\tMTU\t= %d", device->device_id, device->mtu ); |
} |
}else{ |
// create a new device |
172,11 → 172,16 |
if( ! device ) return ENOMEM; |
device->device_id = device_id; |
device->service = service; |
device->mtu = mtu; |
device->mtu = ( mtu > 0 ) ? mtu : ETH_MAX_CONTENT; |
// TODO get dummy setting |
device->dummy = 0; |
// bind the device driver |
device->phone = bind_service( device->service, device->device_id, SERVICE_ETHERNET, 0, eth_receiver ); |
if( device->phone < 0 ){ |
rwlock_write_unlock( & eth_globals.devices_lock ); |
free( device ); |
return device->phone; |
} |
// get hardware address |
message = async_send_1( device->phone, NET_NETIF_GET_ADDR, device->device_id, & answer ); |
if( ERROR_OCCURRED( measured_strings_return( device->phone, & device->addr, & device->addr_data, 1 ))){ |
201,6 → 206,7 |
free( device ); |
return ERROR_CODE; |
} |
printf( "\nNew device registered:\n\tid\t= %d\n\tservice\t= %d\n\tMTU\t= %d\n\taddress\t= %X:%X:%X:%X:%X:%X", device->device_id, device->service, device->mtu, device->addr_data[ 0 ], device->addr_data[ 1 ], device->addr_data[ 2 ], device->addr_data[ 3 ], device->addr_data[ 4 ], device->addr_data[ 5 ] ); |
} |
rwlock_write_unlock( & eth_globals.devices_lock ); |
return EOK; |
303,7 → 309,7 |
rwlock_write_unlock( & eth_globals.devices_lock ); |
return ENOENT; |
} |
* content = ( ETH_MAX_CONTENT > device->mtu ) ? device->mtu : ETH_MAX_CONTENT; |
* content = ( ETH_MAX_CONTENT > device->mtu ) ? device->mtu : ETH_MAX_CONTENT; |
rwlock_write_unlock( & eth_globals.devices_lock ); |
* addr_len = ETH_ADDR; |
* prefix = ETH_PREFIX; |
359,6 → 365,7 |
return ERROR_CODE; |
} |
} |
printf( "\nNew protocol registered:\n\tprotocol\t= %d\n\tservice\t= %d\n\tphone\t= %d", proto->protocol, proto->service, proto->phone ); |
rwlock_write_unlock( & eth_globals.protos_lock ); |
return EOK; |
} |