diff --git a/connectivity/lwipstack/source/LWIPStack.cpp b/connectivity/lwipstack/source/LWIPStack.cpp index dc807d7d60..f270a92301 100644 --- a/connectivity/lwipstack/source/LWIPStack.cpp +++ b/connectivity/lwipstack/source/LWIPStack.cpp @@ -567,6 +567,22 @@ nsapi_error_t LWIP::setsockopt(nsapi_socket_t handle, int level, int optname, co } return 0; + case NSAPI_BROADCAST: + if (NETCONNTYPE_GROUP(s->conn->type) != NETCONN_UDP) { + return NSAPI_ERROR_UNSUPPORTED; + } + + if (optlen != sizeof(int)) { + return NSAPI_ERROR_UNSUPPORTED; + } + + if (*(const int *)optval) { + ip_set_option(s->conn->pcb.ip, SOF_BROADCAST); + } else { + ip_reset_option(s->conn->pcb.ip, SOF_BROADCAST); + } + return 0; + case NSAPI_ADD_MEMBERSHIP: case NSAPI_DROP_MEMBERSHIP: { if (optlen != sizeof(nsapi_ip_mreq_t)) { diff --git a/connectivity/netsocket/include/netsocket/nsapi_types.h b/connectivity/netsocket/include/netsocket/nsapi_types.h index d8080e0754..eef8f34cc5 100644 --- a/connectivity/netsocket/include/netsocket/nsapi_types.h +++ b/connectivity/netsocket/include/netsocket/nsapi_types.h @@ -318,6 +318,7 @@ typedef enum nsapi_socket_option { NSAPI_LATENCY, /*!< Read estimated latency to destination */ NSAPI_STAGGER, /*!< Read estimated stagger value to destination */ NSAPI_IPTOS, /*!< Set IP type of service to set specific precedence */ + NSAPI_BROADCAST /*!< Set broadcast flag for UDP socket */ } nsapi_socket_option_t; typedef enum nsapi_tlssocket_level {