Browse Source

Don't wait for physical connection on WiFi interfaces

Joseph C. Lehner 2 years ago
parent
commit
b70de725ca
3 changed files with 21 additions and 0 deletions
  1. 15 0
      ethsock.c
  2. 5 0
      nmrp.c
  3. 1 0
      nmrpd.h

+ 15 - 0
ethsock.c

@@ -546,6 +546,21 @@ inline uint8_t *ethsock_get_hwaddr(struct ethsock *sock)
 	return sock->hwaddr;
 }
 
+bool ethsock_is_wifi(struct ethsock *sock)
+{
+#if defined(NMRPFLASH_WINDOWS)
+	MIB_IF_ROW2 row;
+
+	if (intf_get_if_row(sock->index, &row)) {
+		return row.Type == IF_TYPE_IEEE80211;
+	}
+
+	return false;
+#else
+	return false;
+#endif
+}
+
 bool ethsock_is_unplugged(struct ethsock *sock)
 {
 #if defined(NMRPFLASH_LINUX)

+ 5 - 0
nmrp.c

@@ -448,6 +448,11 @@ int nmrp_do(struct nmrpd_args *args)
 	sigh_orig = signal(SIGINT, sigh);
 
 	if (ethsock_is_unplugged(sock)) {
+		if (ethsock_is_wifi(sock)) {
+			fprintf(stderr, "Error: WiFi not connected.\n");
+			goto out;
+		}
+
 		printf("Waiting for Ethernet connection.\n");
 
 		bool unplugged = true;

+ 1 - 0
nmrpd.h

@@ -126,6 +126,7 @@ struct ethsock_ip_undo;
 
 struct ethsock *ethsock_create(const char *intf, uint16_t protocol);
 bool ethsock_is_unplugged(struct ethsock *sock);
+bool ethsock_is_wifi(struct ethsock *sock);
 int ethsock_close(struct ethsock *sock);
 int ethsock_send(struct ethsock *sock, void *buf, size_t len);
 ssize_t ethsock_recv(struct ethsock *sock, void *buf, size_t len);