From c3b57e8e834b942e3df0b77199b66640e3c3cf67 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 11 Jul 2012 19:51:26 +0200 Subject: [PATCH] nfs4: Use IPPROTO_* instead of enum Transport --- .../kernel/file_systems/nfs4/Connection.cpp | 26 ++++++++++++------- .../kernel/file_systems/nfs4/Connection.h | 16 ++++-------- .../kernel/file_systems/nfs4/FileSystem.cpp | 7 +++-- .../kernel/file_systems/nfs4/RPCServer.cpp | 7 +---- .../kernel/file_systems/nfs4/RPCServer.h | 3 +-- .../kernel/file_systems/nfs4/Request.cpp | 4 +-- .../file_systems/nfs4/kernel_interface.cpp | 8 ++++-- 7 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp index f7381c747f..20e1c93ba2 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp @@ -54,7 +54,7 @@ status_t ServerAddress::ResolveName(const char* name, ServerAddress* addr) { addr->fPort = 2049; - addr->fProtocol = ProtocolUDP; + addr->fProtocol = IPPROTO_UDP; struct in_addr iaddr; if (inet_aton(name, &iaddr) != 0) { @@ -86,7 +86,7 @@ ServerAddress::ResolveName(const char* name, ServerAddress* addr) } -Connection::Connection(const sockaddr_in& addr, Transport proto) +Connection::Connection(const sockaddr_in& addr, int proto) : fWaitCancel(create_sem(0, NULL)), fSock(-1), @@ -97,14 +97,14 @@ Connection::Connection(const sockaddr_in& addr, Transport proto) } -ConnectionStream::ConnectionStream(const sockaddr_in& addr, Transport proto) +ConnectionStream::ConnectionStream(const sockaddr_in& addr, int proto) : Connection(addr, proto) { } -ConnectionPacket::ConnectionPacket(const sockaddr_in& addr, Transport proto) +ConnectionPacket::ConnectionPacket(const sockaddr_in& addr, int proto) : Connection(addr, proto) { @@ -323,10 +323,16 @@ Connection::Connect(Connection **pconn, const ServerAddress& id) addr.sin_port = htons(id.fPort); Connection* conn; - if (id.fProtocol == ProtocolTCP) - conn = new(std::nothrow) ConnectionStream(addr, id.fProtocol); - else - conn = new(std::nothrow) ConnectionPacket(addr, id.fProtocol); + switch (id.fProtocol) { + case IPPROTO_TCP: + conn = new(std::nothrow) ConnectionStream(addr, id.fProtocol); + break; + case IPPROTO_UDP: + conn = new(std::nothrow) ConnectionPacket(addr, id.fProtocol); + break; + default: + return B_BAD_VALUE; + } if (conn == NULL) return B_NO_MEMORY; @@ -346,10 +352,10 @@ status_t Connection::_Connect() { switch (fProtocol) { - case ProtocolTCP: + case IPPROTO_TCP: fSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); break; - case ProtocolUDP: + case IPPROTO_UDP: fSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); break; default: diff --git a/src/add-ons/kernel/file_systems/nfs4/Connection.h b/src/add-ons/kernel/file_systems/nfs4/Connection.h index eff2a6673f..2386f76715 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Connection.h +++ b/src/add-ons/kernel/file_systems/nfs4/Connection.h @@ -15,15 +15,10 @@ #include -enum Transport { - ProtocolTCP = 6, - ProtocolUDP = 11 -}; - struct ServerAddress { uint32 fAddress; uint16 fPort; - Transport fProtocol; + int fProtocol; bool operator==(const ServerAddress& x); bool operator<(const ServerAddress& x); @@ -49,22 +44,21 @@ public: void Disconnect(); protected: - Connection(const sockaddr_in& addr, - Transport proto); + Connection(const sockaddr_in& addr, int proto); status_t _Connect(); sem_id fWaitCancel; int fSock; mutex fSockLock; - const Transport fProtocol; + const int fProtocol; const sockaddr_in fServerAddress; }; class ConnectionStream : public Connection { public: ConnectionStream(const sockaddr_in& addr, - Transport proto); + int proto); virtual status_t Send(const void* buffer, uint32 size); virtual status_t Receive(void** buffer, uint32* size); @@ -73,7 +67,7 @@ public: class ConnectionPacket : public Connection { public: ConnectionPacket(const sockaddr_in& addr, - Transport proto); + int proto); virtual status_t Send(const void* buffer, uint32 size); virtual status_t Receive(void** buffer, uint32* size); diff --git a/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp b/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp index a8ab9d4f67..95e95ae2f0 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp @@ -215,16 +215,15 @@ FileSystem::Migrate(const RPC::Server* serv) reinterpret_cast(values[0].fData.fLocations); RPC::Server* server = fServer; + ServerAddress addr = fServer->ID(); for (uint32 i = 0; i < locs->fCount; i++) { for (uint32 j = 0; j < locs->fLocations[i].fCount; j++) { - ServerAddress addr; - if (ServerAddress::ResolveName(locs->fLocations[i].fLocations[j], &addr) != B_OK) continue; - if (gRPCServerManager->Acquire(&fServer, addr.fAddress, addr.fPort, - addr.fProtocol, CreateNFS4Server) == B_OK) { + if (gRPCServerManager->Acquire(&fServer, addr, + CreateNFS4Server) == B_OK) { free(const_cast(fPath)); fPath = strdup(locs->fLocations[i].fRootPath); diff --git a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp index 5e017149ad..cf913d39ff 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp @@ -279,16 +279,11 @@ ServerManager::~ServerManager() status_t -ServerManager::Acquire(Server** pserv, uint32 ip, uint16 port, Transport proto, +ServerManager::Acquire(Server** pserv, const ServerAddress& id, ProgramData* (*createPriv)(Server*)) { status_t result; - ServerAddress id; - id.fAddress = ip; - id.fPort = port; - id.fProtocol = proto; - MutexLocker locker(fLock); ServerNode* node = _Find(id); if (node != NULL) { diff --git a/src/add-ons/kernel/file_systems/nfs4/RPCServer.h b/src/add-ons/kernel/file_systems/nfs4/RPCServer.h index 4d622d9905..3a4a7edd46 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RPCServer.h +++ b/src/add-ons/kernel/file_systems/nfs4/RPCServer.h @@ -160,8 +160,7 @@ public: ServerManager(); ~ServerManager(); - status_t Acquire(Server** pserv, uint32 ip, uint16 port, - Transport proto, + status_t Acquire(Server** pserv, const ServerAddress& id, ProgramData* (*createPriv)(Server*)); void Release(Server* serv); diff --git a/src/add-ons/kernel/file_systems/nfs4/Request.cpp b/src/add-ons/kernel/file_systems/nfs4/Request.cpp index 9e39a36b05..5262341889 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Request.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Request.cpp @@ -15,8 +15,8 @@ status_t Request::Send(Cookie* cookie) { switch (fServer->ID().fProtocol) { - case ProtocolUDP: return _SendUDP(cookie); - case ProtocolTCP: return _SendTCP(cookie); + case IPPROTO_UDP: return _SendUDP(cookie); + case IPPROTO_TCP: return _SendTCP(cookie); } return B_BAD_VALUE; diff --git a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp index 223bb6279d..b497f6e07f 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -80,9 +80,13 @@ nfs4_mount(fs_volume* volume, const char* device, uint32 flags, if (result != B_OK) return result; + ServerAddress id; + id.fAddress = ip; + id.fPort = 2049; + id.fProtocol = IPPROTO_UDP; + RPC::Server *server; - result = gRPCServerManager->Acquire(&server, ip, 2049, ProtocolUDP, - CreateNFS4Server); + result = gRPCServerManager->Acquire(&server, id, CreateNFS4Server); if (result != B_OK) return result;