From 2e0d54fd4cf2e0d40f07cf5944217dbdd248d699 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Wed, 9 Nov 2016 10:56:15 +0100 Subject: [PATCH] fix routing config on source IP --- tools/conf/router.go | 2 +- tools/conf/router_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/tools/conf/router.go b/tools/conf/router.go index 0bf528ea2..46cd97832 100644 --- a/tools/conf/router.go +++ b/tools/conf/router.go @@ -152,7 +152,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { } if rawFieldRule.SourceIP != nil { - for _, ip := range *rawFieldRule.IP { + for _, ip := range *rawFieldRule.SourceIP { ipRule := parseIP(ip) if ipRule != nil { rule.SourceCidr = append(rule.SourceCidr, ipRule) diff --git a/tools/conf/router_test.go b/tools/conf/router_test.go index 00a1a585e..f7d69c2c6 100644 --- a/tools/conf/router_test.go +++ b/tools/conf/router_test.go @@ -135,3 +135,31 @@ func TestIPRule(t *testing.T) { Destination: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80), })).IsTrue() } + +func TestSourceIPRule(t *testing.T) { + assert := assert.On(t) + + rule := ParseRule([]byte(`{ + "type": "field", + "source": [ + "10.0.0.0/8", + "192.0.0.0/24" + ], + "outboundTag": "direct" + }`)) + assert.Pointer(rule).IsNotNil() + cond, err := rule.BuildCondition() + assert.Error(err).IsNil() + assert.Bool(cond.Apply(&proxy.SessionInfo{ + Source: v2net.TCPDestination(v2net.DomainAddress("www.ooxx.com"), 80), + })).IsFalse() + assert.Bool(cond.Apply(&proxy.SessionInfo{ + Source: v2net.TCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}), 80), + })).IsTrue() + assert.Bool(cond.Apply(&proxy.SessionInfo{ + Source: v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), 80), + })).IsFalse() + assert.Bool(cond.Apply(&proxy.SessionInfo{ + Source: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80), + })).IsTrue() +}