mtr/backport-Fix-changing-source.patch
liyunqing 1b07d88645 fix changing source failed
(cherry picked from commit 2911b40a691876ef5f33e1ae26c6823145cce979)
2022-08-11 19:28:03 +08:00

213 lines
6.0 KiB
Diff

From 3d176ea1f0f45e0c715dd1d7ef545edb9b6abc19 Mon Sep 17 00:00:00 2001
From: Aaron Lipinski <aaron.lipinski@roboticsplus.co.nz>
Date: Sat, 3 Apr 2021 15:00:45 +1300
Subject: [PATCH 1/5] move net_send_batch call to its caller
---
ui/gtk.c | 1 +
ui/net.c | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index dd79efc..0fd8339 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -249,6 +249,7 @@ static gint Host_activate(
addr = dns_forward(gtk_entry_get_text(GTK_ENTRY(entry)));
if (addr) {
net_reopen(ctl, addr);
+ net_send_batch(ctl);
/* If we are "Paused" at this point it is usually because someone
entered a non-existing host. Therefore do the go-ahead... */
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Pause_Button), 0);
diff --git a/ui/net.c b/ui/net.c
index e4752b7..3160195 100644
--- a/ui/net.c
+++ b/ui/net.c
@@ -785,7 +785,6 @@ void net_reopen(
memcpy(remoteaddress, addr->h_addr, sockaddr_addr_size(remotesockaddr));
memcpy(sockaddr_addr_offset(remotesockaddr), addr->h_addr, sockaddr_addr_size(remotesockaddr));
net_reset(ctl);
- net_send_batch(ctl);
}
--
2.27.0
From 69933c309082d2ef25815613c59a7a744a914b16 Mon Sep 17 00:00:00 2001
From: Aaron Lipinski <aaron.lipinski@roboticsplus.co.nz>
Date: Sat, 3 Apr 2021 15:05:01 +1300
Subject: [PATCH 2/5] addr -> hostent for consistency
---
ui/net.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/ui/net.c b/ui/net.c
index 3160195..f7aa088 100644
--- a/ui/net.c
+++ b/ui/net.c
@@ -773,7 +773,7 @@ int net_open(
void net_reopen(
struct mtr_ctl *ctl,
- struct hostent *addr)
+ struct hostent *hostent)
{
int at;
@@ -781,9 +781,9 @@ void net_reopen(
memset(&host[at], 0, sizeof(host[at]));
}
- remotesockaddr->sa_family = addr->h_addrtype;
- memcpy(remoteaddress, addr->h_addr, sockaddr_addr_size(remotesockaddr));
- memcpy(sockaddr_addr_offset(remotesockaddr), addr->h_addr, sockaddr_addr_size(remotesockaddr));
+ remotesockaddr->sa_family = hostent->h_addrtype;
+ memcpy(remoteaddress, hostent->h_addr, sockaddr_addr_size(remotesockaddr));
+ memcpy(sockaddr_addr_offset(remotesockaddr), hostent->h_addr, sockaddr_addr_size(remotesockaddr));
net_reset(ctl);
}
--
2.27.0
From 6c3b1bd36624609f83c6ce3563c3bcfb98d824ae Mon Sep 17 00:00:00 2001
From: Aaron Lipinski <aaron.lipinski@roboticsplus.co.nz>
Date: Sat, 3 Apr 2021 15:07:17 +1300
Subject: [PATCH 3/5] re-init source too
---
ui/net.c | 35 ++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/ui/net.c b/ui/net.c
index f7aa088..866879b 100644
--- a/ui/net.c
+++ b/ui/net.c
@@ -747,6 +747,22 @@ int net_open(
return err;
}
+ net_reopen(ctl, hostent);
+
+ return 0;
+}
+
+
+void net_reopen(
+ struct mtr_ctl *ctl,
+ struct hostent *hostent)
+{
+ int at;
+
+ for (at = 0; at < MaxHost; at++) {
+ memset(&host[at], 0, sizeof(host[at]));
+ }
+
net_reset(ctl);
remotesockaddr->sa_family = sourcesockaddr->sa_family = hostent->h_addrtype;
@@ -766,25 +782,6 @@ int net_open(
}
inet_ntop(remotesockaddr->sa_family, sockaddr_addr_offset(remotesockaddr), remoteaddr, sizeof(remoteaddr));
-
- return 0;
-}
-
-
-void net_reopen(
- struct mtr_ctl *ctl,
- struct hostent *hostent)
-{
- int at;
-
- for (at = 0; at < MaxHost; at++) {
- memset(&host[at], 0, sizeof(host[at]));
- }
-
- remotesockaddr->sa_family = hostent->h_addrtype;
- memcpy(remoteaddress, hostent->h_addr, sockaddr_addr_size(remotesockaddr));
- memcpy(sockaddr_addr_offset(remotesockaddr), hostent->h_addr, sockaddr_addr_size(remotesockaddr));
- net_reset(ctl);
}
--
2.27.0
From 54d91ea2f04966e1d4cdf6a080c6b80857ee7bd6 Mon Sep 17 00:00:00 2001
From: Aaron Lipinski <aaron.lipinski@roboticsplus.co.nz>
Date: Sat, 3 Apr 2021 15:25:09 +1300
Subject: [PATCH 4/5] additional call from net_reopen
---
ui/net.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/ui/net.c b/ui/net.c
index 866879b..e47cbcf 100644
--- a/ui/net.c
+++ b/ui/net.c
@@ -770,6 +770,7 @@ void net_reopen(
sourceaddress = sockaddr_addr_offset(sourcesockaddr);
remoteaddress = sockaddr_addr_offset(remotesockaddr);
+ memcpy(remoteaddress, hostent->h_addr, sockaddr_addr_size(remotesockaddr));
if (ctl->InterfaceAddress) {
net_validate_interface_address(ctl->af, ctl->InterfaceAddress);
--
2.27.0
From e486335d7552c2a87b4a14bdf04394a590be3441 Mon Sep 17 00:00:00 2001
From: Aaron Lipinski <aaron.lipinski@roboticsplus.co.nz>
Date: Sat, 3 Apr 2021 15:34:31 +1300
Subject: [PATCH 5/5] refactor - group local, remote inits
---
ui/net.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/ui/net.c b/ui/net.c
index e47cbcf..a44a81e 100644
--- a/ui/net.c
+++ b/ui/net.c
@@ -766,23 +766,22 @@ void net_reopen(
net_reset(ctl);
remotesockaddr->sa_family = sourcesockaddr->sa_family = hostent->h_addrtype;
- memcpy(sockaddr_addr_offset(remotesockaddr), hostent->h_addr, sockaddr_addr_size(remotesockaddr));
-
- sourceaddress = sockaddr_addr_offset(sourcesockaddr);
remoteaddress = sockaddr_addr_offset(remotesockaddr);
memcpy(remoteaddress, hostent->h_addr, sockaddr_addr_size(remotesockaddr));
+ inet_ntop(remotesockaddr->sa_family, remoteaddress, remoteaddr, sizeof(remoteaddr));
+
+ sourceaddress = sockaddr_addr_offset(sourcesockaddr);
if (ctl->InterfaceAddress) {
net_validate_interface_address(ctl->af, ctl->InterfaceAddress);
} else if (ctl->InterfaceName) {
net_find_interface_address_from_name(
&sourcesockaddr_struct, ctl->af, ctl->InterfaceName);
- inet_ntop(sourcesockaddr->sa_family, sockaddr_addr_offset(sourcesockaddr), localaddr, sizeof(localaddr));
+ inet_ntop(sourcesockaddr->sa_family, sourceaddress, localaddr, sizeof(localaddr));
} else {
net_find_local_address();
}
- inet_ntop(remotesockaddr->sa_family, sockaddr_addr_offset(remotesockaddr), remoteaddr, sizeof(remoteaddr));
}
--
2.27.0