This commit is contained in:
Matthias Radestock committed 2015-11-05 19:01:34 +00:00
1 parent 094c7aa438
commit ad15e5a234
4 files changed
+26 -53

No files matched your search

+11 -22
View File
@@ -248,8 +248,7 @@ func (fastdp fastDatapathBridge) InjectPacket(key PacketKey) FlowOp {
// Ethernet bridge implementation
func (fastdp *FastDatapath) bridge(ingress bridgePortID,
key PacketKey, lock *fastDatapathLock) FlowOp {
func (fastdp *FastDatapath) bridge(ingress bridgePortID, key PacketKey, lock *fastDatapathLock) FlowOp {
lock.relock()
if fastdp.sendToMAC[key.SrcMAC] == nil {
// Learn the source MAC
@@ -393,8 +392,7 @@ func (fastdp fastDatapathOverlay) Diagnostics() interface{} {
}
}
func (fastdp fastDatapathOverlay) StartConsumingPackets(localPeer *Peer,
peers *Peers, consumer OverlayConsumer) error {
func (fastdp fastDatapathOverlay) StartConsumingPackets(localPeer *Peer, peers *Peers, consumer OverlayConsumer) error {
fastdp.lock.Lock()
defer fastdp.lock.Unlock()
@@ -485,8 +483,7 @@ type vxlanSpecialPacketFlowOp struct {
sender *net.UDPAddr
}
func (op vxlanSpecialPacketFlowOp) Process(frame []byte, dec *EthernetDecoder,
broadcast bool) {
func (op vxlanSpecialPacketFlowOp) Process(frame []byte, dec *EthernetDecoder, broadcast bool) {
op.fastdp.lock.Lock()
fwd := op.fastdp.forwarders[op.srcPeer.Name]
op.fastdp.lock.Unlock()
@@ -518,8 +515,7 @@ type fastDatapathForwarder struct {
errorChan chan error
}
func (fastdp fastDatapathOverlay) MakeForwarder(
params ForwarderParams) (OverlayForwarder, error) {
func (fastdp fastDatapathOverlay) MakeForwarder(params ForwarderParams) (OverlayForwarder, error) {
if params.Crypto != nil {
// No encryption suport in fastdp. The weaver main.go
// is responsible for ensuring this doesn't happen.
@@ -681,8 +677,7 @@ const (
FastDatapathHeartbeatAck = iota
)
func (fwd *fastDatapathForwarder) handleVxlanSpecialPacket(frame []byte,
sender *net.UDPAddr) {
func (fwd *fastDatapathForwarder) handleVxlanSpecialPacket(frame []byte, sender *net.UDPAddr) {
fwd.lock.Lock()
defer fwd.lock.Unlock()
@@ -809,8 +804,7 @@ func (fwd *fastDatapathForwarder) Stop() {
}
}
func (fastdp *FastDatapath) addForwarder(peer PeerName,
fwd *fastDatapathForwarder) {
func (fastdp *FastDatapath) addForwarder(peer PeerName, fwd *fastDatapathForwarder) {
fastdp.lock.Lock()
defer fastdp.lock.Unlock()
@@ -819,8 +813,7 @@ func (fastdp *FastDatapath) addForwarder(peer PeerName,
fastdp.forwarders[peer] = fwd
}
func (fastdp *FastDatapath) removeForwarder(peer PeerName,
fwd *fastDatapathForwarder) {
func (fastdp *FastDatapath) removeForwarder(peer PeerName, fwd *fastDatapathForwarder) {
fastdp.lock.Lock()
defer fastdp.lock.Unlock()
if fastdp.forwarders[peer] == fwd {
@@ -922,8 +915,7 @@ func (fastdp *FastDatapath) expireFlows() {
// maintain its MAC->peer table. We do this by querying the router
// without an actual packet being involved. Maybe it's
// worth devising a more unified approach in the future.
func (fastdp *FastDatapath) touchFlow(fks odp.FlowKeys,
lock *fastDatapathLock) {
func (fastdp *FastDatapath) touchFlow(fks odp.FlowKeys, lock *fastDatapathLock) {
// All the flows we create should have an ingress key, but we
// check here just in case we encounter one from somewhere
// else.
@@ -1044,8 +1036,7 @@ func flowKeysToPacketKey(fks odp.FlowKeys) PacketKey {
// The sendToPort map is read-only, so this method does the copy in
// order to add an entry.
func (fastdp *FastDatapath) addSendToPort(portID bridgePortID,
sender bridgeSender) {
func (fastdp *FastDatapath) addSendToPort(portID bridgePortID, sender bridgeSender) {
sendToPort := map[bridgePortID]bridgeSender{portID: sender}
for id, sender := range fastdp.sendToPort {
sendToPort[id] = sender
@@ -1064,8 +1055,7 @@ func (fastdp *FastDatapath) deleteSendToPort(portID bridgePortID) {
}
// Send a packet, creating a corresponding ODP flow rule if possible
func (fastdp *FastDatapath) send(fops FlowOp, frame []byte,
lock *fastDatapathLock) {
func (fastdp *FastDatapath) send(fops FlowOp, frame []byte, lock *fastDatapathLock) {
// Gather the actions from actionFlowOps, execute any others
var dec *EthernetDecoder
flow := odp.NewFlowSpec()
@@ -1157,8 +1147,7 @@ func (fop odpActionsFlowOp) updateFlowSpec(flow *odp.FlowSpec) {
flow.AddActions(fop.actions)
}
func (fop odpActionsFlowOp) Process(frame []byte, dec *EthernetDecoder,
broadcast bool) {
func (fop odpActionsFlowOp) Process(frame []byte, dec *EthernetDecoder, broadcast bool) {
fastdp := fop.fastdp
fastdp.lock.Lock()
defer fastdp.lock.Unlock()
+1 -2
View File
@@ -64,8 +64,7 @@ func (mfop *MultiFlowOp) Add(op FlowOp) {
mfop.ops = append(mfop.ops, op)
}
func (mfop *MultiFlowOp) Process(frame []byte, dec *EthernetDecoder,
broadcast bool) {
func (mfop *MultiFlowOp) Process(frame []byte, dec *EthernetDecoder, broadcast bool) {
for _, op := range mfop.ops {
op.Process(frame, dec, mfop.broadcast)
}
+4 -8
View File
@@ -60,8 +60,7 @@ func (osw *OverlaySwitch) InvalidateShortIDs() {
}
}
func (osw *OverlaySwitch) StartConsumingPackets(localPeer *Peer, peers *Peers,
consumer OverlayConsumer) error {
func (osw *OverlaySwitch) StartConsumingPackets(localPeer *Peer, peers *Peers, consumer OverlayConsumer) error {
for _, overlay := range osw.overlays {
if err := overlay.StartConsumingPackets(localPeer, peers,
consumer); err != nil {
@@ -162,8 +161,7 @@ type subForwarderEvent struct {
err error
}
func (osw *OverlaySwitch) MakeForwarder(
params ForwarderParams) (OverlayForwarder, error) {
func (osw *OverlaySwitch) MakeForwarder(params ForwarderParams) (OverlayForwarder, error) {
if _, present := params.Features["Overlays"]; !present && osw.compatOverlay != nil {
return osw.compatOverlay.MakeForwarder(params)
}
@@ -224,8 +222,7 @@ func (osw *OverlaySwitch) MakeForwarder(
return fwd, nil
}
func monitorForwarder(index int, eventsChan chan<- subForwarderEvent,
stopChan <-chan struct{}, fwd OverlayForwarder) {
func monitorForwarder(index int, eventsChan chan<- subForwarderEvent, stopChan <-chan struct{}, fwd OverlayForwarder) {
establishedChan := fwd.EstablishedChannel()
loop:
for {
@@ -257,8 +254,7 @@ loop:
fwd.Stop()
}
func (fwd *overlaySwitchForwarder) run(eventsChan <-chan subForwarderEvent,
stopChan <-chan struct{}) {
func (fwd *overlaySwitchForwarder) run(eventsChan <-chan subForwarderEvent, stopChan <-chan struct{}) {
loop:
for {
select {
+10 -21
View File
@@ -74,8 +74,7 @@ func NewSleeveOverlay(localPort int) Overlay {
return &SleeveOverlay{localPort: localPort}
}
func (sleeve *SleeveOverlay) StartConsumingPackets(localPeer *Peer, peers *Peers,
consumer OverlayConsumer) error {
func (sleeve *SleeveOverlay) StartConsumingPackets(localPeer *Peer, peers *Peers, consumer OverlayConsumer) error {
localAddr, err := net.ResolveUDPAddr("udp4",
fmt.Sprint(":", sleeve.localPort))
if err != nil {
@@ -149,8 +148,7 @@ func (sleeve *SleeveOverlay) addForwarder(peer PeerName, fwd *sleeveForwarder) {
sleeve.forwarders[peer] = fwd
}
func (sleeve *SleeveOverlay) removeForwarder(peer PeerName,
fwd *sleeveForwarder) {
func (sleeve *SleeveOverlay) removeForwarder(peer PeerName, fwd *sleeveForwarder) {
sleeve.lock.Lock()
defer sleeve.lock.Unlock()
if sleeve.forwarders[peer] == fwd {
@@ -209,9 +207,7 @@ func (sleeve *SleeveOverlay) readUDP() {
}
}
func (sleeve *SleeveOverlay) handleFrame(sender *net.UDPAddr,
fwd *sleeveForwarder, src []byte, dst []byte, frame []byte,
dec *EthernetDecoder) {
func (sleeve *SleeveOverlay) handleFrame(sender *net.UDPAddr, fwd *sleeveForwarder, src []byte, dst []byte, frame []byte, dec *EthernetDecoder) {
dec.DecodeLayers(frame)
decodedLen := len(dec.decoded)
if decodedLen == 0 {
@@ -246,8 +242,7 @@ func (sleeve *SleeveOverlay) handleFrame(sender *net.UDPAddr,
sleeve.sendToConsumer(srcPeer, dstPeer, frame, dec)
}
func (sleeve *SleeveOverlay) sendToConsumer(srcPeer, dstPeer *Peer,
frame []byte, dec *EthernetDecoder) {
func (sleeve *SleeveOverlay) sendToConsumer(srcPeer, dstPeer *Peer, frame []byte, dec *EthernetDecoder) {
if sleeve.consumer == nil {
return
}
@@ -436,8 +431,7 @@ func (fwd *sleeveForwarder) Forward(key ForwardPacketKey) FlowOp {
return curriedForward{fwd: fwd, key: key}
}
func (f curriedForward) Process(frame []byte, dec *EthernetDecoder,
broadcast bool) {
func (f curriedForward) Process(frame []byte, dec *EthernetDecoder, broadcast bool) {
fwd := f.fwd
fwd.lock.RLock()
haveContact := (fwd.remoteAddr != nil)
@@ -519,16 +513,14 @@ func (f curriedForward) Process(frame []byte, dec *EthernetDecoder,
}))
}
func (fwd *sleeveForwarder) aggregate(ch chan<- aggregatorFrame, src []byte,
dst []byte, frame []byte) {
func (fwd *sleeveForwarder) aggregate(ch chan<- aggregatorFrame, src []byte, dst []byte, frame []byte) {
select {
case ch <- aggregatorFrame{src, dst, frame}:
case <-fwd.finishedChan:
}
}
func fragment(eth layers.Ethernet, ip layers.IPv4, mtu int,
forward func([]byte)) error {
func fragment(eth layers.Ethernet, ip layers.IPv4, mtu int, forward func([]byte)) error {
// We are not doing any sort of NAT, so we don't need to worry
// about checksums of IP payload (eg UDP checksum).
headerSize := int(ip.IHL) * 4
@@ -683,8 +675,7 @@ loop:
}
func (fwd *sleeveForwarder) aggregateAndSend(frame aggregatorFrame,
aggChan <-chan aggregatorFrame, enc Encryptor, sender udpSender,
limit int) error {
aggChan <-chan aggregatorFrame, enc Encryptor, sender udpSender, limit int) error {
// Give up after processing N frames, to avoid starving the
// other activities of the forwarder goroutine.
i := 0
@@ -734,8 +725,7 @@ func fits(frame aggregatorFrame, enc Encryptor, limit int) bool {
return enc.TotalLen()+enc.FrameOverhead()+len(frame.frame) <= limit
}
func (fwd *sleeveForwarder) flushEncryptor(enc Encryptor,
sender udpSender) error {
func (fwd *sleeveForwarder) flushEncryptor(enc Encryptor, sender udpSender) error {
msg, err := enc.Bytes()
if err != nil {
return err
@@ -744,8 +734,7 @@ func (fwd *sleeveForwarder) flushEncryptor(enc Encryptor,
return fwd.processSendError(sender.send(msg, fwd.remoteAddr))
}
func (fwd *sleeveForwarder) sendSpecial(enc Encryptor, sender udpSender,
data []byte) error {
func (fwd *sleeveForwarder) sendSpecial(enc Encryptor, sender udpSender, data []byte) error {
enc.AppendFrame(fwd.sleeve.localPeerBin, fwd.remotePeerBin, data)
return fwd.flushEncryptor(enc, sender)
}