struct sockaddr_in address;
int interface_length;
struct sockaddr_in interface_address;
+ struct sockaddr_in interface_netmask;
char interface_name[64];
};
gtk_widget_set_sensitive(start_button, FALSE);
}
- // check subnet to see if can access
+ // if not on the same subnet then cannot start it
+ if((d->interface_address.sin_addr.s_addr&d->interface_netmask.sin_addr.s_addr) != (d->address.sin_addr.s_addr&d->interface_netmask.sin_addr.s_addr)) {
+ gtk_button_set_label(GTK_BUTTON(start_button),"Subnet!");
+ gtk_widget_set_sensitive(start_button, FALSE);
+ }
GtkWidget *configure_button=gtk_button_new_with_label("Configure");
gtk_widget_override_font(configure_button, pango_font_description_from_string("Arial 18"));
_exit(0);
}
-#ifdef INCLUDE_GPIO
gtk_widget_destroy(discovery_dialog);
+#ifdef INCLUDE_GPIO
if(result==GTK_RESPONSE_YES) {
configure_gpio();
}
static char interface_name[64];
static struct sockaddr_in interface_addr={0};
+static struct sockaddr_in interface_netmask={0};
static int interface_length;
#define DISCOVERY_PORT 1024
void new_discover(struct ifaddrs* iface) {
int rc;
struct sockaddr_in *sa;
- //char *addr;
+ struct sockaddr_in *mask;
+ char addr[16];
+ char net_mask[16];
strcpy(interface_name,iface->ifa_name);
fprintf(stderr,"new_discover: looking for HPSDR devices on %s\n",interface_name);
setsockopt(discovery_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
sa = (struct sockaddr_in *) iface->ifa_addr;
- //addr = inet_ntoa(sa->sin_addr);
+ mask = (struct sockaddr_in *) iface->ifa_netmask;
+
+ interface_netmask.sin_addr.s_addr = mask->sin_addr.s_addr;
// bind to this interface and the discovery port
interface_addr.sin_family = AF_INET;
exit(-1);
}
- fprintf(stderr,"new_discover: bound to %s\n",interface_name);
+ strcpy(addr,inet_ntoa(sa->sin_addr));
+ strcpy(net_mask,inet_ntoa(mask->sin_addr));
+
+ fprintf(stderr,"new_discover: bound to %s %s %s\n",interface_name,addr,net_mask);
// allow broadcast on the socket
int on=1;
exit(-1);
}
-
// send discovery packet
unsigned char buffer[60];
buffer[0]=0x00;
memcpy((void*)&discovered[devices].address,(void*)&addr,sizeof(addr));
discovered[devices].address_length=sizeof(addr);
memcpy((void*)&discovered[devices].interface_address,(void*)&interface_addr,sizeof(interface_addr));
+ memcpy((void*)&discovered[devices].interface_netmask,(void*)&interface_netmask,sizeof(interface_netmask));
discovered[devices].interface_length=sizeof(interface_addr);
strcpy(discovered[devices].interface_name,interface_name);
fprintf(stderr,"new_discover: found protocol=%d device=%d software_version=%d status=%d address=%s (%02X:%02X:%02X:%02X:%02X:%02X) on %s\n",
static char interface_name[64];
static struct sockaddr_in interface_addr={0};
+static struct sockaddr_in interface_netmask={0};
static int interface_length;
#define DISCOVERY_PORT 1024
static void discover(struct ifaddrs* iface) {
int rc;
struct sockaddr_in *sa;
- //char *addr;
+ struct sockaddr_in *mask;
strcpy(interface_name,iface->ifa_name);
- fprintf(stderr,"discover: looking for HPSDR devices on %s\n",interface_name);
+ fprintf(stderr,"discover: looking for HPSDR devices on %s\n", interface_name);
// send a broadcast to locate hpsdr boards on the network
discovery_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
setsockopt(discovery_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
sa = (struct sockaddr_in *) iface->ifa_addr;
- //addr = inet_ntoa(sa->sin_addr);
+ mask = (struct sockaddr_in *) iface->ifa_netmask;
+ interface_netmask.sin_addr.s_addr = mask->sin_addr.s_addr;
// bind to this interface and the discovery port
interface_addr.sin_family = AF_INET;
memcpy((void*)&discovered[devices].address,(void*)&addr,sizeof(addr));
discovered[devices].address_length=sizeof(addr);
memcpy((void*)&discovered[devices].interface_address,(void*)&interface_addr,sizeof(interface_addr));
+ memcpy((void*)&discovered[devices].interface_netmask,(void*)&interface_netmask,sizeof(interface_netmask));
discovered[devices].interface_length=sizeof(interface_addr);
strcpy(discovered[devices].interface_name,interface_name);
fprintf(stderr,"discovery: found device=%d software_version=%d status=%d address=%s (%02X:%02X:%02X:%02X:%02X:%02X) on %s\n",