diff -Naur smap.orig/icmpping.c smap/icmpping.c --- smap.orig/icmpping.c 2007-10-07 06:15:11.000000000 -0400 +++ smap/icmpping.c 2009-06-13 11:57:28.000000000 -0400 @@ -182,6 +182,7 @@ struct sockaddr_in sin; #define ICMP_PKT_LEN (sizeof(struct icmp) + ICMP_PAYLOAD_LEN) char icmpbuf[ICMP_PKT_LEN]; + socklen_t socklen; /* prepare ICMP packet */ memset(&icmpbuf, 'A', ICMP_PKT_LEN); @@ -207,6 +208,8 @@ if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one)) != 0) perror("setsockopt"); #endif + if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) != 0) + perror("setsockopt"); icmp->icmp_cksum = icmp_in_cksum((unsigned short *) &icmpbuf, ICMP_PKT_LEN); /* send data */ diff -Naur smap.orig/smap.c smap/smap.c --- smap.orig/smap.c 2007-11-03 14:14:52.000000000 -0400 +++ smap/smap.c 2009-06-13 10:49:15.000000000 -0400 @@ -244,11 +244,11 @@ break; case 't': /* TCP transport */ /* UDP is default so TCP would override it */ - config.flags ^= FLAG_UDP_TRANSPORT; + config.flags &= ~FLAG_UDP_TRANSPORT; config.flags |= FLAG_TCP_TRANSPORT; break; case 'u': /* UDP transport */ - config.flags ^= FLAG_TCP_TRANSPORT; + config.flags &= ~FLAG_TCP_TRANSPORT; config.flags |= FLAG_UDP_TRANSPORT; break; case 'r': /* ratelimit messages/sec */ diff -Naur smap.orig/transport_udp.c smap/transport_udp.c --- smap.orig/transport_udp.c 2008-08-20 09:02:57.000000000 -0400 +++ smap/transport_udp.c 2009-06-13 11:56:15.000000000 -0400 @@ -52,6 +52,7 @@ extern int udp_sendsock; extern struct sockaddr_in udp_sendsock_sockaddr; int sockaddrlen; + int one; /* is 5060 (DEFAULT_SIP_PORT) available? * if yes, we'll use it since some clients send responses to @@ -116,6 +117,13 @@ error(ERR_DEBUG, "bind() successful"); } } + one = 1; + if (setsockopt(udp_sendsock, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) != 0) { + perror("setsockopt"); + error(ERR_ERROR, "unable to set socket to broadcast"); + return 0; + } + if (getsockname(udp_sendsock, (struct sockaddr *) &udp_sendsock_sockaddr, (socklen_t *) &sockaddrlen) != 0) if (DEBUG) perror("getsocknameudp_sendsock");