|
@@ -3,6 +3,8 @@ package netlink
|
|
import (
|
|
import (
|
|
"fmt"
|
|
"fmt"
|
|
"net"
|
|
"net"
|
|
|
|
+
|
|
|
|
+ "github.com/vishvananda/netlink/nl"
|
|
)
|
|
)
|
|
|
|
|
|
// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.
|
|
// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.
|
|
@@ -47,6 +49,18 @@ func (e XfrmStateEncap) String() string {
|
|
e.Type, e.SrcPort, e.DstPort, e.OriginalAddress)
|
|
e.Type, e.SrcPort, e.DstPort, e.OriginalAddress)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// XfrmStateLimits represents the configured limits for the state.
|
|
|
|
+type XfrmStateLimits struct {
|
|
|
|
+ ByteSoft uint64
|
|
|
|
+ ByteHard uint64
|
|
|
|
+ PacketSoft uint64
|
|
|
|
+ PacketHard uint64
|
|
|
|
+ TimeSoft uint64
|
|
|
|
+ TimeHard uint64
|
|
|
|
+ TimeUseSoft uint64
|
|
|
|
+ TimeUseHard uint64
|
|
|
|
+}
|
|
|
|
+
|
|
// XfrmState represents the state of an ipsec policy. It optionally
|
|
// XfrmState represents the state of an ipsec policy. It optionally
|
|
// contains an XfrmStateAlgo for encryption and one for authentication.
|
|
// contains an XfrmStateAlgo for encryption and one for authentication.
|
|
type XfrmState struct {
|
|
type XfrmState struct {
|
|
@@ -57,6 +71,7 @@ type XfrmState struct {
|
|
Spi int
|
|
Spi int
|
|
Reqid int
|
|
Reqid int
|
|
ReplayWindow int
|
|
ReplayWindow int
|
|
|
|
+ Limits XfrmStateLimits
|
|
Mark *XfrmMark
|
|
Mark *XfrmMark
|
|
Auth *XfrmStateAlgo
|
|
Auth *XfrmStateAlgo
|
|
Crypt *XfrmStateAlgo
|
|
Crypt *XfrmStateAlgo
|
|
@@ -67,3 +82,19 @@ func (sa XfrmState) String() string {
|
|
return fmt.Sprintf("Dst: %v, Src: %v, Proto: %s, Mode: %s, SPI: 0x%x, ReqID: 0x%x, ReplayWindow: %d, Mark: %v, Auth: %v, Crypt: %v, Encap: %v",
|
|
return fmt.Sprintf("Dst: %v, Src: %v, Proto: %s, Mode: %s, SPI: 0x%x, ReqID: 0x%x, ReplayWindow: %d, Mark: %v, Auth: %v, Crypt: %v, Encap: %v",
|
|
sa.Dst, sa.Src, sa.Proto, sa.Mode, sa.Spi, sa.Reqid, sa.ReplayWindow, sa.Mark, sa.Auth, sa.Crypt, sa.Encap)
|
|
sa.Dst, sa.Src, sa.Proto, sa.Mode, sa.Spi, sa.Reqid, sa.ReplayWindow, sa.Mark, sa.Auth, sa.Crypt, sa.Encap)
|
|
}
|
|
}
|
|
|
|
+func (sa XfrmState) Print(stats bool) string {
|
|
|
|
+ if !stats {
|
|
|
|
+ return sa.String()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return fmt.Sprintf("%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d",
|
|
|
|
+ sa.String(), printLimit(sa.Limits.ByteSoft), printLimit(sa.Limits.ByteHard), printLimit(sa.Limits.PacketSoft), printLimit(sa.Limits.PacketHard),
|
|
|
|
+ sa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func printLimit(lmt uint64) string {
|
|
|
|
+ if lmt == nl.XFRM_INF {
|
|
|
|
+ return "(INF)"
|
|
|
|
+ }
|
|
|
|
+ return fmt.Sprintf("%d", lmt)
|
|
|
|
+}
|