@@ -10,27 +10,33 @@ import (
10
10
"time"
11
11
12
12
"github.com/bjdgyc/anylink/base"
13
+ "github.com/songgao/water/waterutil"
13
14
"golang.org/x/text/language"
14
15
"golang.org/x/text/message"
15
16
)
16
17
17
18
const (
18
19
Allow = "allow"
19
20
Deny = "deny"
20
- All = "all"
21
+ ALL = "all"
22
+ TCP = "tcp"
23
+ UDP = "udp"
24
+ ICMP = "icmp"
21
25
)
22
26
23
27
// 域名分流最大字符2万
24
28
const DsMaxLen = 20000
25
29
26
30
type GroupLinkAcl struct {
27
31
// 自上而下匹配 默认 allow * *
28
- Action string `json:"action"` // allow、deny
29
- Val string `json:"val"`
30
- Port string `json:"port"` // 兼容单端口历史数据类型uint16
31
- Ports map [uint16 ]int8 `json:"ports"`
32
- IpNet * net.IPNet `json:"ip_net"`
33
- Note string `json:"note"`
32
+ Action string `json:"action"` // allow、deny
33
+ Protocol string `json:"protocol"` // 支持 ALL、TCP、UDP、ICMP 协议
34
+ IpProto waterutil.IPProtocol `json:"ip_protocol"` // 判断协议使用
35
+ Val string `json:"val"`
36
+ Port string `json:"port"` // 兼容单端口历史数据类型uint16
37
+ Ports map [uint16 ]int8 `json:"ports"`
38
+ IpNet * net.IPNet `json:"ip_net"`
39
+ Note string `json:"note"`
34
40
}
35
41
36
42
type ValData struct {
@@ -114,7 +120,7 @@ func SetGroup(g *Group) error {
114
120
routeInclude := []ValData {}
115
121
for _ , v := range g .RouteInclude {
116
122
if v .Val != "" {
117
- if v .Val == All {
123
+ if v .Val == ALL {
118
124
routeInclude = append (routeInclude , v )
119
125
continue
120
126
}
@@ -164,6 +170,19 @@ func SetGroup(g *Group) error {
164
170
}
165
171
v .IpNet = ipNet
166
172
173
+ // 设置协议数据
174
+ switch v .Protocol {
175
+ case TCP :
176
+ v .IpProto = waterutil .TCP
177
+ case UDP :
178
+ v .IpProto = waterutil .UDP
179
+ case ICMP :
180
+ v .IpProto = waterutil .ICMP
181
+ default :
182
+ // 其他类型都是 all
183
+ v .Protocol = ALL
184
+ }
185
+
167
186
portsStr := v .Port
168
187
v .Port = strings .TrimSpace (portsStr )
169
188
// switch vp := v.Port.(type) {
0 commit comments