@@ -31,35 +31,30 @@ func newPortForwarder(l *logrus.Logger, sshConfig *ssh.SSHConfig, sshHostPort in
31
31
}
32
32
}
33
33
34
- func (pf * portForwarder ) forwardingAddresses (guestPort int ) (string , string ) {
34
+ func (pf * portForwarder ) forwardingAddresses (guest api. IPPort ) (string , string ) {
35
35
for _ , port := range pf .ports {
36
- if port .GuestPortRange [0 ] <= guestPort && guestPort <= port .GuestPortRange [1 ] {
37
- guestAddr := fmt .Sprintf ("%s:%d" , port .GuestIP , guestPort )
36
+ if port .GuestPortRange [0 ] <= guest .Port && guest .Port <= port .GuestPortRange [1 ] {
37
+ guestAddr := fmt .Sprintf ("%s:%d" , port .GuestIP , guest .Port )
38
+ if port .Ignore {
39
+ return guestAddr , ""
40
+ }
38
41
offset := port .HostPortRange [0 ] - port .GuestPortRange [0 ]
39
- hostAddr := fmt .Sprintf ("%s:%d" , port .HostIP , guestPort + offset )
42
+ hostAddr := fmt .Sprintf ("%s:%d" , port .HostIP , guest . Port + offset )
40
43
return guestAddr , hostAddr
41
44
}
42
45
}
43
- addr := "127.0.0.1:" + strconv .Itoa (guestPort )
46
+ addr := "127.0.0.1:" + strconv .Itoa (guest . Port )
44
47
return addr , addr
45
48
}
46
49
47
50
func (pf * portForwarder ) OnEvent (ctx context.Context , ev api.Event ) {
48
- ignore := func (x api.IPPort ) bool {
49
- switch x .Port {
50
- case sshGuestPort , pf .sshHostPort :
51
- return true
52
- default :
53
- return false
54
- }
55
- }
56
51
for _ , f := range ev .LocalPortsRemoved {
57
- if ignore (f ) {
58
- continue
59
- }
60
52
// pf.tcp might be inconsistent with the actual state of the SSH master,
61
53
// so we always attempt to cancel forwarding, even when f.Port is not tracked in pf.tcp.
62
- guestAddr , hostAddr := pf .forwardingAddresses (f .Port )
54
+ guestAddr , hostAddr := pf .forwardingAddresses (f )
55
+ if hostAddr == "" {
56
+ continue
57
+ }
63
58
pf .l .Infof ("Stopping forwarding TCP from %s to %s" , guestAddr , hostAddr )
64
59
verbCancel := true
65
60
if err := forwardSSH (ctx , pf .sshConfig , pf .sshHostPort , hostAddr , guestAddr , verbCancel ); err != nil {
@@ -72,10 +67,11 @@ func (pf *portForwarder) OnEvent(ctx context.Context, ev api.Event) {
72
67
delete (pf .tcp , f .Port )
73
68
}
74
69
for _ , f := range ev .LocalPortsAdded {
75
- if ignore (f ) {
70
+ guestAddr , hostAddr := pf .forwardingAddresses (f )
71
+ if hostAddr == "" {
72
+ pf .l .Infof ("Not forwarding TCP from %s" , guestAddr )
76
73
continue
77
74
}
78
- guestAddr , hostAddr := pf .forwardingAddresses (f .Port )
79
75
pf .l .Infof ("Forwarding TCP from %s to %s" , guestAddr , hostAddr )
80
76
if err := forwardSSH (ctx , pf .sshConfig , pf .sshHostPort , hostAddr , guestAddr , false ); err != nil {
81
77
pf .l .WithError (err ).Warnf ("failed to setting up forward TCP port %d (negligible if already forwarded)" , f .Port )
0 commit comments