From c7462560731460554397b71ac83955a9f4d56e95 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 27 Oct 2017 12:44:31 +0200 Subject: use sync.Map in SA --- satp/security-association.go | 42 +++++++++++++++++---------------------- satp/security-association_test.go | 9 +++------ 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") } } -- cgit v1.2.3