本文整理汇总了Golang中net.HardwareAddr函数的典型用法代码示例。如果您正苦于以下问题:Golang HardwareAddr函数的具体用法?Golang HardwareAddr怎么用?Golang HardwareAddr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HardwareAddr函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestPacketDot11CtrlAck
func TestPacketDot11CtrlAck(t *testing.T) {
p := gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.Default)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
if !got.ChecksumValid() {
t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got)
}
}
if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
want := &Dot11{
BaseLayer: BaseLayer{
Contents: []uint8{0xd4, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
Payload: []uint8{},
},
Type: Dot11TypeCtrlAck,
Proto: 0x0,
Flags: 0x0,
DurationID: 0x0,
Address1: net.HardwareAddr{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
Address2: net.HardwareAddr(nil),
Address3: net.HardwareAddr(nil),
Address4: net.HardwareAddr(nil),
Checksum: 0x8776e946,
}
if !reflect.DeepEqual(got, want) {
t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
}
}
}
示例2: NewEthernet
func NewEthernet() *Ethernet {
eth := new(Ethernet)
eth.HWDst = net.HardwareAddr(make([]byte, 6))
eth.HWSrc = net.HardwareAddr(make([]byte, 6))
eth.VLANID = *NewVLAN()
eth.Ethertype = 0x800
return eth
}
示例3: handleInitialSubnetEvents
func (vb *VXLANBackend) handleInitialSubnetEvents(batch []subnet.Event) error {
log.Infof("Handling initial subnet events")
fdbTable, err := vb.dev.GetL2List()
if err != nil {
return fmt.Errorf("Error fetching L2 table: %v", err)
}
for _, fdbEntry := range fdbTable {
log.Infof("fdb already populated with: %s %s ", fdbEntry.IP, fdbEntry.HardwareAddr)
}
evtMarker := make([]bool, len(batch))
leaseAttrsList := make([]vxlanLeaseAttrs, len(batch))
fdbEntryMarker := make([]bool, len(fdbTable))
for i, evt := range batch {
if evt.Lease.Attrs.BackendType != "vxlan" {
log.Warningf("Ignoring non-vxlan subnet: type=%v", evt.Lease.Attrs.BackendType)
evtMarker[i] = true
continue
}
if err := json.Unmarshal(evt.Lease.Attrs.BackendData, &leaseAttrsList[i]); err != nil {
log.Error("Error decoding subnet lease JSON: ", err)
evtMarker[i] = true
continue
}
for j, fdbEntry := range fdbTable {
if evt.Lease.Attrs.PublicIP.ToIP().Equal(fdbEntry.IP) && bytes.Equal([]byte(leaseAttrsList[i].VtepMAC), []byte(fdbEntry.HardwareAddr)) {
evtMarker[i] = true
fdbEntryMarker[j] = true
break
}
}
vb.rts.set(evt.Lease.Subnet, net.HardwareAddr(leaseAttrsList[i].VtepMAC))
}
for j, marker := range fdbEntryMarker {
if !marker && fdbTable[j].IP != nil {
err := vb.dev.DelL2(neigh{IP: ip.FromIP(fdbTable[j].IP), MAC: fdbTable[j].HardwareAddr})
if err != nil {
log.Error("Delete L2 failed: ", err)
}
}
}
for i, marker := range evtMarker {
if !marker {
err := vb.dev.AddL2(neigh{IP: batch[i].Lease.Attrs.PublicIP, MAC: net.HardwareAddr(leaseAttrsList[i].VtepMAC)})
if err != nil {
log.Error("Add L2 failed: ", err)
}
}
}
return nil
}
示例4: handleSubnetEvents
func (vb *VXLANBackend) handleSubnetEvents(batch subnet.EventBatch) {
for _, evt := range batch {
switch evt.Type {
case subnet.SubnetAdded:
log.Info("Subnet added: ", evt.Lease.Network)
if evt.Lease.Attrs.BackendType != "vxlan" {
log.Warningf("Ignoring non-vxlan subnet: type=%v", evt.Lease.Attrs.BackendType)
continue
}
var attrs vxlanLeaseAttrs
if err := json.Unmarshal(evt.Lease.Attrs.BackendData, &attrs); err != nil {
log.Error("Error decoding subnet lease JSON: ", err)
continue
}
if err := vb.dev.AddL2(neigh{IP: evt.Lease.Attrs.PublicIP, MAC: net.HardwareAddr(attrs.VtepMAC)}); err != nil {
log.Error("Error adding L2 entry: ", err)
}
if err := vb.dev.AddL3(neigh{IP: evt.Lease.Network.IP, MAC: net.HardwareAddr(attrs.VtepMAC)}); err != nil {
log.Error("Error adding L3 entry: ", err)
}
if err := vb.dev.AddRoute(evt.Lease.Network); err != nil {
log.Error("Error adding route: ", err)
}
case subnet.SubnetRemoved:
log.Info("Subnet removed: ", evt.Lease.Network)
if evt.Lease.Attrs.BackendType != "vxlan" {
log.Warningf("Ignoring non-vxlan subnet: type=%v", evt.Lease.Attrs.BackendType)
continue
}
var attrs vxlanLeaseAttrs
if err := json.Unmarshal(evt.Lease.Attrs.BackendData, &attrs); err != nil {
log.Error("Error decoding subnet lease JSON: ", err)
continue
}
if err := vb.dev.DelRoute(evt.Lease.Network); err != nil {
log.Error("Error deleting route: ", err)
}
if len(attrs.VtepMAC) > 0 {
if err := vb.dev.DelL2(neigh{IP: evt.Lease.Attrs.PublicIP, MAC: net.HardwareAddr(attrs.VtepMAC)}); err != nil {
log.Error("Error deleting L2 entry: ", err)
}
if err := vb.dev.DelL3(neigh{IP: evt.Lease.Network.IP, MAC: net.HardwareAddr(attrs.VtepMAC)}); err != nil {
log.Error("Error deleting L3 entry: ", err)
}
}
default:
log.Error("Internal error: unknown event type: ", int(evt.Type))
}
}
}
示例5: NewMatch
// NewMatch returns a Match whose fields are all wildcarded
func NewMatch() openflow.Match {
return &Match{
wildcards: newWildcardAll(),
srcMAC: net.HardwareAddr([]byte{0, 0, 0, 0, 0, 0}),
dstMAC: net.HardwareAddr([]byte{0, 0, 0, 0, 0, 0}),
srcIP: net.IPv4zero,
dstIP: net.IPv4zero,
}
}
示例6: DecodeFromBytes
func (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
if len(data) < 10 {
df.SetTruncated()
return fmt.Errorf("Dot11 length %v too short, %v required", len(data), 10)
}
m.Type = Dot11Type((data[0])&0xFC) >> 2
m.Proto = uint8(data[0]) & 0x0003
m.Flags = Dot11Flags(data[1])
m.DurationID = binary.LittleEndian.Uint16(data[2:4])
m.Address1 = net.HardwareAddr(data[4:10])
offset := 10
mainType := m.Type.MainType()
switch mainType {
case Dot11TypeCtrl:
switch m.Type {
case Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:
if len(data) < offset+6 {
df.SetTruncated()
return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
}
m.Address2 = net.HardwareAddr(data[offset : offset+6])
offset += 6
}
case Dot11TypeMgmt, Dot11TypeData:
if len(data) < offset+14 {
df.SetTruncated()
return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+14)
}
m.Address2 = net.HardwareAddr(data[offset : offset+6])
offset += 6
m.Address3 = net.HardwareAddr(data[offset : offset+6])
offset += 6
m.SequenceNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0xFFF0) >> 4
m.FragmentNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0x000F)
offset += 2
}
if mainType == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {
if len(data) < offset+6 {
df.SetTruncated()
return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
}
m.Address4 = net.HardwareAddr(data[offset : offset+6])
offset += 6
}
m.BaseLayer = BaseLayer{Contents: data[0:offset], Payload: data[offset : len(data)-4]}
m.Checksum = binary.LittleEndian.Uint32(data[len(data)-4 : len(data)])
return nil
}
示例7: decodeFDDI
func decodeFDDI(data []byte, p gopacket.PacketBuilder) error {
f := &FDDI{
FrameControl: FDDIFrameControl(data[0] & 0xF8),
Priority: data[0] & 0x07,
SrcMAC: net.HardwareAddr(data[1:7]),
DstMAC: net.HardwareAddr(data[7:13]),
BaseLayer: BaseLayer{data[:13], data[13:]},
}
p.SetLinkLayer(f)
p.AddLayer(f)
return p.NextDecoder(f.FrameControl)
}
示例8: decodeEthernet
// http://en.wikipedia.org/wiki/Ethernet_frame#Structure
//
// - no preamble / SFD / FCS (handle by hardware)
//
// +---------+---------+------+------------------------------------
// | dest | src | type | payload
// +---------+---------+------+------------------------------------
func decodeEthernet(raw []byte) (Impl, decodeFunc, error) {
if len(raw) < 14 {
return nil, nil, errDecodeFailed
}
dest := net.HardwareAddr(raw[0:6])
src := net.HardwareAddr(raw[6:12])
type_ := EthernetType(binary.BigEndian.Uint16(raw[12:14]))
p := &Ethernet{dest, src, type_, raw}
return p, p.Type.Decoder(), nil
}
示例9: Unpack
func (p *Packet) Unpack(buf *packet.Buffer) error {
p.DstAddr = net.HardwareAddr(buf.Next(6))
p.SrcAddr = net.HardwareAddr(buf.Next(6))
buf.ReadN(&p.Type)
if p.Type < 0x0600 {
p.Length = uint16(p.Type)
p.Type = LLC
}
return nil
}
示例10: handleForwardedPacket
func (router *Router) handleForwardedPacket(key ForwardPacketKey) FlowOp {
if key.DstPeer != router.Ourself.Peer {
// it's not for us, we're just relaying it
router.PacketLogging.LogForwardPacket("Relaying", key)
return router.relay(key)
}
// At this point, it's either unicast to us, or a broadcast
// (because the DstPeer on a forwarded broadcast packet is
// always set to the peer being forwarded to)
srcMac := net.HardwareAddr(key.SrcMAC[:])
dstMac := net.HardwareAddr(key.DstMAC[:])
switch newSrcMac, conflictPeer := router.Macs.AddForced(srcMac, key.SrcPeer); {
case newSrcMac:
log.Print("Discovered remote MAC ", srcMac, " at ", key.SrcPeer)
case conflictPeer != nil:
log.Print("Discovered remote MAC ", srcMac, " at ", key.SrcPeer, " (was at ", conflictPeer, ")")
// We need to clear out any flows destined to the MAC
// that forward to the old peer.
router.Overlay.InvalidateRoutes()
}
router.PacketLogging.LogForwardPacket("Injecting", key)
injectFop := router.Bridge.InjectPacket(key.PacketKey)
dstPeer := router.Macs.Lookup(dstMac)
if dstPeer == router.Ourself.Peer {
return injectFop
}
router.PacketLogging.LogForwardPacket("Relaying broadcast", key)
relayFop := router.relayBroadcast(key.SrcPeer, key.PacketKey)
switch {
case injectFop == nil:
return relayFop
case relayFop == nil:
return injectFop
default:
mfop := NewMultiFlowOp(false)
mfop.Add(injectFop)
mfop.Add(relayFop)
return mfop
}
}
示例11: TestRequestPacket
func TestRequestPacket(t *testing.T) {
var tests = []struct {
description string
mt MessageType
chAddr net.HardwareAddr
cIAddr net.IP
xId []byte
broadcast bool
options []Option
}{
{
description: "discover request",
mt: Discover,
chAddr: net.HardwareAddr([]byte("01:23:45:67:89:ab")),
cIAddr: net.IP([]byte{192, 168, 1, 1}),
xId: []byte{0, 1, 2, 3},
broadcast: true,
options: nil,
},
{
description: "request request",
mt: Request,
chAddr: net.HardwareAddr([]byte("de:ad:be:ef:de:ad")),
xId: []byte{4, 5, 6, 7},
broadcast: false,
options: oneOptionSlice,
},
{
description: "decline request",
mt: Decline,
chAddr: net.HardwareAddr([]byte("ff:ff:ff:ff:ff:ff")),
xId: []byte{8, 9, 10, 11},
broadcast: true,
options: twoOptionsSlice,
},
}
for i, tt := range tests {
// Compare our basic test implementation's packet against the library's
// implementation
want := newRequestPacket(tt.mt, tt.chAddr, tt.cIAddr, tt.xId, tt.broadcast, tt.options)
got := RequestPacket(tt.mt, tt.chAddr, tt.cIAddr, tt.xId, tt.broadcast, tt.options)
if !bytes.Equal(want, got) {
t.Fatalf("%02d: RequestPacket(), test %q, unexpected result: %v != %v",
i, tt.description, want, got)
}
}
}
示例12: MarshalJSON
// JSON encoder for MAC addresses
func (i HardwareAddr) MarshalJSON() ([]byte, error) {
buf := new(bytes.Buffer)
buf.WriteByte('"')
buf.WriteString(net.HardwareAddr(i).String())
buf.WriteByte('"')
return buf.Bytes(), nil
}
示例13: DstMAC
func (r *BaseAction) DstMAC() (ok bool, mac net.HardwareAddr) {
if r.dstMAC == nil {
return false, net.HardwareAddr([]byte{0, 0, 0, 0, 0, 0})
}
return true, *r.dstMAC
}
示例14: newInterfaces
func newInterfaces(ctx *C.struct_ibv_context) {
var deviceAttr C.struct_ibv_device_attr
errno := C.ibv_query_device(ctx, &deviceAttr)
if errno != 0 {
return
}
pd := C.ibv_alloc_pd(ctx)
if pd == nil {
panic(newError("ibv_alloc_pd", -1))
}
pds[pd] = true
for port := C.uint8_t(1); port <= deviceAttr.phys_port_cnt; port++ {
var portAttr C.struct_ibv_port_attr
errno := C.ibv_query_port(ctx, port, &portAttr)
if errno != 0 {
continue
}
var gid C.union_ibv_gid
errno = C.ibv_query_gid(ctx, port, 0, &gid)
if errno != 0 {
continue
}
// last 8 bytes of GID is the GUID
guid := net.HardwareAddr(gid[8:])
iface := &Interface{ctx, pd, uint8(port), &deviceAttr, guid}
interfaces = append(interfaces, iface)
guidToInterface[string([]byte(guid))] = iface
}
}
示例15: DecodeFromBytes
func (m *Dot11MgmtReassociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
m.ListenInterval = binary.LittleEndian.Uint16(data[2:4])
m.CurrentApAddress = net.HardwareAddr(data[4:10])
m.Payload = data[10:]
return m.Dot11Mgmt.DecodeFromBytes(data, df)
}