Move DF indication into LogFrame

This commit is contained in:
David Wragg committed 2015-06-25 17:11:20 +01:00
1 parent 4162dcafd3
commit 5690902173
3 files changed
+19 -19

No files matched your search

+10 -5
View File
@@ -11,7 +11,6 @@ import (
"runtime"
"strings"
"code.google.com/p/gopacket/layers"
"github.com/davecheney/profile"
"github.com/gorilla/mux"
. "github.com/weaveworks/weave/common"
@@ -196,11 +195,17 @@ func logFrameFunc(debug bool) weave.LogFrameFunc {
}
return func(prefix string, frame []byte, dec *weave.EthernetDecoder) {
h := fmt.Sprintf("%x", sha256.Sum256(frame))
if dec == nil {
log.Println(prefix, len(frame), "bytes (", h, ")")
} else {
log.Println(prefix, len(frame), "bytes (", h, "):", dec.Eth.SrcMAC, "->", dec.Eth.DstMAC)
parts := []interface{}{prefix, len(frame), "bytes (", h, ")"}
if dec != nil {
parts = append(parts, dec.Eth.SrcMAC, "->", dec.Eth.DstMAC)
if dec.DF() {
parts = append(parts, "(DF)")
}
}
log.Println(parts...)
}
}
+4
View File
@@ -75,3 +75,7 @@ func (dec *EthernetDecoder) IsSpecial() bool {
return dec.Eth.Length == 0 && dec.Eth.EthernetType == layers.EthernetTypeLLC &&
bytes.Equal(zeroMAC, dec.Eth.SrcMAC) && bytes.Equal(zeroMAC, dec.Eth.DstMAC)
}
func (dec *EthernetDecoder) DF() bool {
return len(dec.decoded) == 2 && (dec.IP.Flags&layers.IPv4DontFragment != 0)
}
+5 -14
View File
@@ -11,7 +11,6 @@ import (
"syscall"
"time"
"code.google.com/p/gopacket/layers"
. "github.com/weaveworks/weave/common"
)
@@ -170,12 +169,9 @@ func (router *Router) handleCapturedPacket(frameData []byte, dec *EthernetDecode
if found && dstPeer == router.Ourself.Peer {
return
}
df := decodedLen == 2 && (dec.IP.Flags&layers.IPv4DontFragment != 0)
if df {
router.LogFrame("Forwarding DF", frameData, dec)
} else {
router.LogFrame("Forwarding", frameData, dec)
}
df := dec.DF()
router.LogFrame("Forwarding", frameData, dec)
// at this point we are handing over the frame to forwarders, so
// we need to make a copy of it in order to prevent the next
// capture from overwriting the data
@@ -316,16 +312,11 @@ func (router *Router) handleUDPPacketFunc(relayConn *LocalConnection, dec *Ether
return
}
df := decodedLen == 2 && (dec.IP.Flags&layers.IPv4DontFragment != 0)
df := dec.DF()
if dstPeer != router.Ourself.Peer {
// it's not for us, we're just relaying it
if df {
router.LogFrame("Relaying DF", frame, dec)
} else {
router.LogFrame("Relaying", frame, dec)
}
router.LogFrame("Relaying", frame, dec)
err := router.Ourself.Relay(srcPeer, dstPeer, df, frame, dec)
if ftbe, ok := err.(FrameTooBigError); ok {
err = dec.sendICMPFragNeeded(ftbe.EPMTU, func(icmpFrame []byte) error {