rem: return B_ERROR;
add: switch(op) { case PPPoE_GET_INTERFACES: { int32 position = 0, count = 0; char *names = (char*) data;  ifnet *current = get_interfaces(); for(; current; current = current->if_next) { if(current->if_type == IFT_ETHER && current->name) { if(position + strlen(current->name) + 1 > length) return B_NO_MEMORY;  strcpy(names + position, current->name); position += strlen(current->name) + 1; ++count; } }  return count; }  case PPPoE_QUERY_SERVICES: {   if(!data || length != sizeof(pppoe_query_request)) return B_ERROR;  pppoe_query_request *request = (pppoe_query_request*) data;  pppoe_query query; query.ethernetIfnet = FindPPPoEInterface(request->interfaceName); if(!query.ethernetIfnet) return B_BAD_VALUE;  query.hostUniq = NewHostUniq(); query.receiver = request->receiver;  sLock.Lock(); sQueries->AddItem(&query); sLock.Unlock();  snooze(2000000);   sLock.Lock(); sQueries->RemoveItem(&query); sLock.Unlock(); } break;  default: return B_ERROR; }  return B_OK;
context: control(uint32 op, void *data, size_t length){	return B_ERROR;}