summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2017-10-27 12:44:31 +0200
committerChristian Pointner <equinox@anytun.org>2017-10-27 12:44:31 +0200
commitc7462560731460554397b71ac83955a9f4d56e95 (patch)
tree01658061f542ef18c28c15c17074a61128fbb1c6
parentsome more tests (diff)
use sync.Map in SA
-rw-r--r--satp/security-association.go42
-rw-r--r--satp/security-association_test.go9
2 files changed, 21 insertions, 30 deletions
diff --git a/satp/security-association.go b/satp/security-association.go
index 28c7851..48d6c5c 100644
--- a/satp/security-association.go
+++ b/satp/security-association.go
@@ -36,54 +36,48 @@ import (
)
type SecurityAssociation struct {
- mtx *sync.RWMutex
- kd KeyDerivation
- endpoints []*net.UDPAddr
- nextSeq uint32
- seqWins map[uint16]*SequenceWindow
-}
-
-func (sa *SecurityAssociation) SetKeyDerivation(kd KeyDerivation) {
- sa.mtx.Lock()
- defer sa.mtx.Unlock()
- sa.kd = kd
+ kd KeyDerivation
+ endpoints []*net.UDPAddr
+ nextSeqNr uint32
+ initialSeqNrInbound uint32
+ seqWins *sync.Map
}
func (sa *SecurityAssociation) KeyGenerate(dir Direction, usage KeyUsage, sequenceNumber uint32, out []byte) error {
- sa.mtx.RLock()
- defer sa.mtx.RUnlock()
return sa.kd.Generate(dir, usage, sequenceNumber, out)
}
+func (sa *SecurityAssociation) EndpointUpdate(idx uint, ep *net.UDPAddr) {
+ // TODO: implement this
+}
+
func (sa *SecurityAssociation) EndpointCompareAndUpdate(idx uint, ep *net.UDPAddr) {
- sa.mtx.RLock()
- defer sa.mtx.RUnlock()
// TODO: implement this
}
func (sa *SecurityAssociation) EndpointsAndSequenceNumber() (seqNum uint32, eps []*net.UDPAddr) {
- sa.mtx.RLock()
- defer sa.mtx.RUnlock()
// TODO: implement this
return 0, nil
}
func (sa *SecurityAssociation) SquenceNumberCheck(senderID uint16, sequenceNumber uint32) bool {
- sa.mtx.RLock()
- defer sa.mtx.RUnlock()
// TODO: implement this
return false
}
func (sa *SecurityAssociation) SequenceNumberCheckAndSet(senderID uint16, sequenceNumber uint32) bool {
- sa.mtx.RLock()
- defer sa.mtx.RUnlock()
// TODO: implement this
return false
}
-func NewSecurityAssociation() (sa *SecurityAssociation) {
- sa = &SecurityAssociation{mtx: &sync.RWMutex{}}
- sa.seqWins = make(map[uint16]*SequenceWindow)
+func NewSecurityAssociation(kd KeyDerivation, numEndpoints uint, initialSeqNrOutbound, initialSeqNrInbound uint32) (sa *SecurityAssociation) {
+ sa = &SecurityAssociation{kd: kd}
+ sa.endpoints = make([]*net.UDPAddr, numEndpoints)
+ for i := range sa.endpoints {
+ sa.endpoints[i] = &net.UDPAddr{}
+ }
+ sa.nextSeqNr = initialSeqNrOutbound
+ sa.initialSeqNrInbound = initialSeqNrInbound
+ sa.seqWins = &sync.Map{}
return
}
diff --git a/satp/security-association_test.go b/satp/security-association_test.go
index 311fb6c..553510c 100644
--- a/satp/security-association_test.go
+++ b/satp/security-association_test.go
@@ -35,11 +35,8 @@ import (
)
func TestSecurityAssociationNew(t *testing.T) {
- sa := NewSecurityAssociation()
- if sa.mtx == nil {
- t.Fatal("mutex must not be nil")
- }
- if sa.seqWins == nil {
- t.Fatal("sequence-window map not properly initialized")
+ sa := NewSecurityAssociation(nil, 0, 0, 0)
+ if sa.endpoints == nil {
+ t.Fatal("endpoints must not be nil")
}
}