@@ -152,8 +152,18 @@ static int tp_udp_init(struct mqtt_sn_transport *transport)
152152 }
153153
154154 optval = CONFIG_MQTT_SN_LIB_BROADCAST_RADIUS ;
155- err = zsock_setsockopt (udp -> sock , NET_IPPROTO_IP , ZSOCK_IP_MULTICAST_TTL ,
156- & optval , sizeof (optval ));
155+ if (udp -> bcaddr .sa_family == NET_AF_INET && IS_ENABLED (CONFIG_NET_IPV4 )) {
156+ err = zsock_setsockopt (udp -> sock , NET_IPPROTO_IP ,
157+ ZSOCK_IP_MULTICAST_TTL , & optval ,
158+ sizeof (optval ));
159+ } else if (udp -> bcaddr .sa_family == NET_AF_INET6 && IS_ENABLED (CONFIG_NET_IPV6 )) {
160+ err = zsock_setsockopt (udp -> sock , NET_IPPROTO_IPV6 ,
161+ ZSOCK_IPV6_MULTICAST_HOPS , & optval ,
162+ sizeof (optval ));
163+ } else {
164+ LOG_ERR ("Unknown AF" );
165+ return - EINVAL ;
166+ }
157167 if (err < 0 ) {
158168 return - errno ;
159169 }
@@ -177,18 +187,28 @@ static int tp_udp_sendto(struct mqtt_sn_client *client, void *buf, size_t sz, co
177187 net_socklen_t ttl_len ;
178188
179189 if (dest_addr == NULL ) {
190+ int level , optname ;
191+
180192 LOG_HEXDUMP_DBG (buf , sz , "Sending Broadcast UDP packet" );
181193
182194 /* Set ttl if requested value does not match existing*/
183- rc = zsock_getsockopt (udp -> sock , NET_IPPROTO_IP , ZSOCK_IP_MULTICAST_TTL ,
184- & ttl , & ttl_len );
195+ if (udp -> bcaddr .sa_family == NET_AF_INET && IS_ENABLED (CONFIG_NET_IPV4 )) {
196+ level = NET_IPPROTO_IP ;
197+ optname = ZSOCK_IP_MULTICAST_TTL ;
198+ } else if (udp -> bcaddr .sa_family == NET_AF_INET6 && IS_ENABLED (CONFIG_NET_IPV6 )) {
199+ level = NET_IPPROTO_IPV6 ;
200+ optname = ZSOCK_IPV6_MULTICAST_HOPS ;
201+ } else {
202+ LOG_ERR ("Unknown AF" );
203+ return - EINVAL ;
204+ }
205+ rc = zsock_getsockopt (udp -> sock , level , optname , & ttl , & ttl_len );
185206 if (rc < 0 ) {
186207 return - errno ;
187208 }
188209 if (ttl != addrlen ) {
189210 ttl = addrlen ;
190- rc = zsock_setsockopt (udp -> sock , NET_IPPROTO_IP , ZSOCK_IP_MULTICAST_TTL ,
191- & ttl , sizeof (ttl ));
211+ rc = zsock_setsockopt (udp -> sock , level , optname , & ttl , sizeof (ttl ));
192212 if (rc < 0 ) {
193213 return - errno ;
194214 }
0 commit comments