mirror of
https://github.com/vishvananda/netlink
synced 2025-02-17 20:47:12 +00:00
AddIP prototype change and fix for go 1.6
Removed extra pointer not needed in AddIP Updated tests Removed the use of io.SeekCurrent and defined it as a const Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
This commit is contained in:
parent
8bf4a3aacd
commit
1e86b2bee5
@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"net"
|
"net"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@ -24,6 +23,11 @@ const (
|
|||||||
ConntrackExpectTable = 2
|
ConntrackExpectTable = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// backward compatibility with golang 1.6 which does not have io.SeekCurrent
|
||||||
|
seekCurrent = 1
|
||||||
|
)
|
||||||
|
|
||||||
// InetFamily Family type
|
// InetFamily Family type
|
||||||
type InetFamily uint8
|
type InetFamily uint8
|
||||||
|
|
||||||
@ -167,13 +171,13 @@ func parseIpTuple(reader *bytes.Reader, tpl *ipTuple) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Skip the next 4 bytes nl.NLA_F_NESTED|nl.CTA_TUPLE_PROTO
|
// Skip the next 4 bytes nl.NLA_F_NESTED|nl.CTA_TUPLE_PROTO
|
||||||
reader.Seek(4, io.SeekCurrent)
|
reader.Seek(4, seekCurrent)
|
||||||
_, t, _, v := parseNfAttrTLV(reader)
|
_, t, _, v := parseNfAttrTLV(reader)
|
||||||
if t == nl.CTA_PROTO_NUM {
|
if t == nl.CTA_PROTO_NUM {
|
||||||
tpl.Protocol = uint8(v[0])
|
tpl.Protocol = uint8(v[0])
|
||||||
}
|
}
|
||||||
// Skip some padding 3 bytes
|
// Skip some padding 3 bytes
|
||||||
reader.Seek(3, io.SeekCurrent)
|
reader.Seek(3, seekCurrent)
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
_, t, _ := parseNfAttrTL(reader)
|
_, t, _ := parseNfAttrTL(reader)
|
||||||
switch t {
|
switch t {
|
||||||
@ -183,7 +187,7 @@ func parseIpTuple(reader *bytes.Reader, tpl *ipTuple) {
|
|||||||
parseBERaw16(reader, &tpl.DstPort)
|
parseBERaw16(reader, &tpl.DstPort)
|
||||||
}
|
}
|
||||||
// Skip some padding 2 byte
|
// Skip some padding 2 byte
|
||||||
reader.Seek(2, io.SeekCurrent)
|
reader.Seek(2, seekCurrent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +222,7 @@ func parseRawData(data []byte) *ConntrackFlow {
|
|||||||
binary.Read(reader, nl.NativeEndian(), &s.FamilyType)
|
binary.Read(reader, nl.NativeEndian(), &s.FamilyType)
|
||||||
|
|
||||||
// skip rest of the Netfilter header
|
// skip rest of the Netfilter header
|
||||||
reader.Seek(3, io.SeekCurrent)
|
reader.Seek(3, seekCurrent)
|
||||||
// The message structure is the following:
|
// The message structure is the following:
|
||||||
// <len, NLA_F_NESTED|CTA_TUPLE_ORIG> 4 bytes
|
// <len, NLA_F_NESTED|CTA_TUPLE_ORIG> 4 bytes
|
||||||
// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
|
// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
|
||||||
@ -240,7 +244,7 @@ func parseRawData(data []byte) *ConntrackFlow {
|
|||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
// Header not recognized skip it
|
// Header not recognized skip it
|
||||||
reader.Seek(int64(l), io.SeekCurrent)
|
reader.Seek(int64(l), seekCurrent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,14 +295,14 @@ type ConntrackFilter struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddIP adds an IP to the conntrack filter
|
// AddIP adds an IP to the conntrack filter
|
||||||
func (f *ConntrackFilter) AddIP(tp ConntrackFilterType, ip *net.IP) error {
|
func (f *ConntrackFilter) AddIP(tp ConntrackFilterType, ip net.IP) error {
|
||||||
if f.ipFilter == nil {
|
if f.ipFilter == nil {
|
||||||
f.ipFilter = make(map[ConntrackFilterType]net.IP)
|
f.ipFilter = make(map[ConntrackFilterType]net.IP)
|
||||||
}
|
}
|
||||||
if _, ok := f.ipFilter[tp]; ok {
|
if _, ok := f.ipFilter[tp]; ok {
|
||||||
return errors.New("Filter attribute already present")
|
return errors.New("Filter attribute already present")
|
||||||
}
|
}
|
||||||
f.ipFilter[tp] = *ip
|
f.ipFilter[tp] = ip
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,8 +231,7 @@ func TestConntrackTableDelete(t *testing.T) {
|
|||||||
|
|
||||||
// Create a filter to erase groupB flows
|
// Create a filter to erase groupB flows
|
||||||
filter := &ConntrackFilter{}
|
filter := &ConntrackFilter{}
|
||||||
ip := net.ParseIP("127.0.0.20")
|
filter.AddIP(ConntrackOrigDstIP, net.ParseIP("127.0.0.20"))
|
||||||
filter.AddIP(ConntrackOrigDstIP, &ip)
|
|
||||||
|
|
||||||
// Flush entries of groupB
|
// Flush entries of groupB
|
||||||
var deleted uint
|
var deleted uint
|
||||||
@ -328,12 +327,10 @@ func TestConntrackFilter(t *testing.T) {
|
|||||||
|
|
||||||
// SrcIP filter
|
// SrcIP filter
|
||||||
filterV4 := &ConntrackFilter{}
|
filterV4 := &ConntrackFilter{}
|
||||||
ip := net.ParseIP("10.0.0.1")
|
filterV4.AddIP(ConntrackOrigSrcIP, net.ParseIP("10.0.0.1"))
|
||||||
filterV4.AddIP(ConntrackOrigSrcIP, &ip)
|
|
||||||
|
|
||||||
filterV6 := &ConntrackFilter{}
|
filterV6 := &ConntrackFilter{}
|
||||||
ip = net.ParseIP("eeee:eeee:eeee:eeee:eeee:eeee:eeee:eeee")
|
filterV6.AddIP(ConntrackOrigSrcIP, net.ParseIP("eeee:eeee:eeee:eeee:eeee:eeee:eeee:eeee"))
|
||||||
filterV6.AddIP(ConntrackOrigSrcIP, &ip)
|
|
||||||
|
|
||||||
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
||||||
if v4Match != 1 || v6Match != 1 {
|
if v4Match != 1 || v6Match != 1 {
|
||||||
@ -342,12 +339,10 @@ func TestConntrackFilter(t *testing.T) {
|
|||||||
|
|
||||||
// DstIp filter
|
// DstIp filter
|
||||||
filterV4 = &ConntrackFilter{}
|
filterV4 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("20.0.0.1")
|
filterV4.AddIP(ConntrackOrigDstIP, net.ParseIP("20.0.0.1"))
|
||||||
filterV4.AddIP(ConntrackOrigDstIP, &ip)
|
|
||||||
|
|
||||||
filterV6 = &ConntrackFilter{}
|
filterV6 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd")
|
filterV6.AddIP(ConntrackOrigDstIP, net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd"))
|
||||||
filterV6.AddIP(ConntrackOrigDstIP, &ip)
|
|
||||||
|
|
||||||
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
||||||
if v4Match != 1 || v6Match != 1 {
|
if v4Match != 1 || v6Match != 1 {
|
||||||
@ -356,12 +351,10 @@ func TestConntrackFilter(t *testing.T) {
|
|||||||
|
|
||||||
// SrcIP for NAT
|
// SrcIP for NAT
|
||||||
filterV4 = &ConntrackFilter{}
|
filterV4 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("20.0.0.1")
|
filterV4.AddIP(ConntrackNatSrcIP, net.ParseIP("20.0.0.1"))
|
||||||
filterV4.AddIP(ConntrackNatSrcIP, &ip)
|
|
||||||
|
|
||||||
filterV6 = &ConntrackFilter{}
|
filterV6 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd")
|
filterV6.AddIP(ConntrackNatSrcIP, net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd"))
|
||||||
filterV6.AddIP(ConntrackNatSrcIP, &ip)
|
|
||||||
|
|
||||||
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
||||||
if v4Match != 1 || v6Match != 1 {
|
if v4Match != 1 || v6Match != 1 {
|
||||||
@ -370,12 +363,10 @@ func TestConntrackFilter(t *testing.T) {
|
|||||||
|
|
||||||
// DstIP for NAT
|
// DstIP for NAT
|
||||||
filterV4 = &ConntrackFilter{}
|
filterV4 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("192.168.1.1")
|
filterV4.AddIP(ConntrackNatDstIP, net.ParseIP("192.168.1.1"))
|
||||||
filterV4.AddIP(ConntrackNatDstIP, &ip)
|
|
||||||
|
|
||||||
filterV6 = &ConntrackFilter{}
|
filterV6 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd")
|
filterV6.AddIP(ConntrackNatDstIP, net.ParseIP("dddd:dddd:dddd:dddd:dddd:dddd:dddd:dddd"))
|
||||||
filterV6.AddIP(ConntrackNatDstIP, &ip)
|
|
||||||
|
|
||||||
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
||||||
if v4Match != 2 || v6Match != 0 {
|
if v4Match != 2 || v6Match != 0 {
|
||||||
@ -384,12 +375,10 @@ func TestConntrackFilter(t *testing.T) {
|
|||||||
|
|
||||||
// AnyIp for Nat
|
// AnyIp for Nat
|
||||||
filterV4 = &ConntrackFilter{}
|
filterV4 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("192.168.1.1")
|
filterV4.AddIP(ConntrackNatAnyIP, net.ParseIP("192.168.1.1"))
|
||||||
filterV4.AddIP(ConntrackNatAnyIP, &ip)
|
|
||||||
|
|
||||||
filterV6 = &ConntrackFilter{}
|
filterV6 = &ConntrackFilter{}
|
||||||
ip = net.ParseIP("eeee:eeee:eeee:eeee:eeee:eeee:eeee:eeee")
|
filterV6.AddIP(ConntrackNatAnyIP, net.ParseIP("eeee:eeee:eeee:eeee:eeee:eeee:eeee:eeee"))
|
||||||
filterV6.AddIP(ConntrackNatAnyIP, &ip)
|
|
||||||
|
|
||||||
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
v4Match, v6Match = applyFilter(flowList, filterV4, filterV6)
|
||||||
if v4Match != 2 || v6Match != 1 {
|
if v4Match != 2 || v6Match != 1 {
|
||||||
|
Loading…
Reference in New Issue
Block a user