diff --git a/osal/linux/TmTcUnixUdpBridge.cpp b/osal/linux/TmTcUnixUdpBridge.cpp index 3beef3d45..60f4214ef 100644 --- a/osal/linux/TmTcUnixUdpBridge.cpp +++ b/osal/linux/TmTcUnixUdpBridge.cpp @@ -39,6 +39,7 @@ TmTcUnixUdpBridge::TmTcUnixUdpBridge(object_id_t objectId, "local port " << setServerPort << " to server socket!" << std::endl; // check errno here. + handleBindError(); return; } } @@ -59,6 +60,7 @@ ReturnValue_t TmTcUnixUdpBridge::sendTm(const uint8_t *data, size_t dataLen) { } void TmTcUnixUdpBridge::handleSocketError() { + // See: https://man7.org/linux/man-pages/man2/socket.2.html switch(errno) { case(EACCES): @@ -71,5 +73,46 @@ void TmTcUnixUdpBridge::handleSocketError() { case(EPROTONOSUPPORT): sif::error << "TmTcUnixBridge::TmTcUnixBridge: Socket creation failed" << " with " << strerror(errno) << std::endl; + break; + default: + sif::error << "TmTcUnixBridge::TmTcUnixBridge: Unknown error" + << std::endl; + break; } } + +void TmTcUnixUdpBridge::handleBindError() { + // See: https://man7.org/linux/man-pages/man2/bind.2.html + switch(errno) { + case(EACCES): + /* + Ephermeral ports can be shown with following command: + sysctl -A | grep ip_local_port_range + */ + sif::error << "TmTcUnixBridge::TmTcUnixBridge: Port access issue." + "Ports 1-1024 are reserved on UNIX systems and require root " + "rights while ephermeral ports should not be used as well." + << std::endl; + break; + case(EADDRINUSE): + case(EBADF): + case(EINVAL): + case(ENOTSOCK): + case(EADDRNOTAVAIL): + case(EFAULT): + case(ELOOP): + case(ENAMETOOLONG): + case(ENOENT): + case(ENOMEM): + case(ENOTDIR): + case(EROFS): + sif::error << "TmTcUnixBridge::TmTcUnixBridge: Socket creation failed" + << " with " << strerror(errno) << std::endl; + break; + default: + sif::error << "TmTcUnixBridge::TmTcUnixBridge: Unknown error" + << std::endl; + break; + } + +} diff --git a/osal/linux/TmTcUnixUdpBridge.h b/osal/linux/TmTcUnixUdpBridge.h index ccab1b1f6..7c55ea827 100644 --- a/osal/linux/TmTcUnixUdpBridge.h +++ b/osal/linux/TmTcUnixUdpBridge.h @@ -8,8 +8,10 @@ class TmTcUnixUdpBridge: public TmTcBridge { public: - static constexpr int DEFAULT_UDP_SERVER_PORT = 7; - static constexpr int DEFAULT_UDP_CLIENT_PORT = 2008; + // The ports chosen here should not be used by any other process. + // List of used ports on Linux: /etc/services + static constexpr int DEFAULT_UDP_SERVER_PORT = 7301; + static constexpr int DEFAULT_UDP_CLIENT_PORT = 7302; TmTcUnixUdpBridge(object_id_t objectId, object_id_t ccsdsPacketDistributor, uint16_t serverPort = 0xFFFF,uint16_t clientPort = 0xFFFF); @@ -27,6 +29,7 @@ private: struct sockaddr_in serverAddress; void handleSocketError(); + void handleBindError(); };