Handle GDZL and GZN
This commit is contained in:
parent
d45678b812
commit
0358eea5a4
3 changed files with 87 additions and 0 deletions
|
@ -239,3 +239,14 @@ const (
|
||||||
EventCodeNDC EventCode = 4
|
EventCodeNDC EventCode = 4
|
||||||
EventCodeZC EventCode = 5
|
EventCodeZC EventCode = 5
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (ec EventCode) String() string {
|
||||||
|
return map[EventCode]string{
|
||||||
|
EventCodeNull: "null",
|
||||||
|
EventCodeNA: "network added",
|
||||||
|
EventCodeND: "network deleted",
|
||||||
|
EventCodeNRC: "network route change",
|
||||||
|
EventCodeNDC: "network distance change",
|
||||||
|
EventCodeZC: "zone name change",
|
||||||
|
}[ec]
|
||||||
|
}
|
||||||
|
|
|
@ -209,6 +209,63 @@ func (tr *Transport) NewZIRspPacket(zones ZoneTuples) *ZIRspPacket {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewGDZLReqPacket returns a new GDZL-Req packet structure.
|
||||||
|
func (tr *Transport) NewGDZLReqPacket(startIdx uint16) *GDZLReqPacket {
|
||||||
|
return &GDZLReqPacket{
|
||||||
|
Header: Header{
|
||||||
|
TrHeader: tr.transaction(tr.LocalConnID),
|
||||||
|
CommandCode: CmdCodeZoneReq,
|
||||||
|
Flags: 0,
|
||||||
|
},
|
||||||
|
Subcode: SubcodeGetDomainZoneList,
|
||||||
|
StartIndex: startIdx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGZNRspPacket returns a new GDZL-Rsp packet structure. If GDZL function is
|
||||||
|
// not supported, startIdx should be set to -1.
|
||||||
|
func (tr *Transport) NewGDZLRspPacket(startIdx int16, zoneNames []string) *GDZLRspPacket {
|
||||||
|
return &GDZLRspPacket{
|
||||||
|
Header: Header{
|
||||||
|
TrHeader: tr.transaction(tr.RemoteConnID),
|
||||||
|
CommandCode: CmdCodeZoneReq,
|
||||||
|
Flags: 0,
|
||||||
|
},
|
||||||
|
Subcode: SubcodeGetDomainZoneList,
|
||||||
|
StartIndex: startIdx,
|
||||||
|
ZoneNames: zoneNames,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGZNReqPacket returns a new GZN-Req packet structure requesting nets for a
|
||||||
|
// given zone name.
|
||||||
|
func (tr *Transport) NewGZNReqPacket(zoneName string) *GZNReqPacket {
|
||||||
|
return &GZNReqPacket{
|
||||||
|
Header: Header{
|
||||||
|
TrHeader: tr.transaction(tr.LocalConnID),
|
||||||
|
CommandCode: CmdCodeZoneReq,
|
||||||
|
Flags: 0,
|
||||||
|
},
|
||||||
|
Subcode: SubcodeGetZonesNet,
|
||||||
|
ZoneName: zoneName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGZNRspPacket returns a new GZN-Rsp packet structure.
|
||||||
|
func (tr *Transport) NewGZNRspPacket(zoneName string, notSupported bool, nets NetworkTuples) *GZNRspPacket {
|
||||||
|
return &GZNRspPacket{
|
||||||
|
Header: Header{
|
||||||
|
TrHeader: tr.transaction(tr.RemoteConnID),
|
||||||
|
CommandCode: CmdCodeZoneReq,
|
||||||
|
Flags: 0,
|
||||||
|
},
|
||||||
|
Subcode: SubcodeGetZonesNet,
|
||||||
|
ZoneName: zoneName,
|
||||||
|
NotSupported: notSupported,
|
||||||
|
Networks: nets,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewRDPacket returns a new RD packet structure.
|
// NewRDPacket returns a new RD packet structure.
|
||||||
func (tr *Transport) NewRDPacket(errCode ErrorCode) *RDPacket {
|
func (tr *Transport) NewRDPacket(errCode ErrorCode) *RDPacket {
|
||||||
return &RDPacket{
|
return &RDPacket{
|
||||||
|
|
19
peer.go
19
peer.go
|
@ -345,12 +345,31 @@ func (p *peer) handle(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
if _, err := p.send(p.tr.NewZIRspPacket(zones)); err != nil {
|
if _, err := p.send(p.tr.NewZIRspPacket(zones)); err != nil {
|
||||||
log.Printf("Couldn't send ZI-Rsp packet: %v", err)
|
log.Printf("Couldn't send ZI-Rsp packet: %v", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
case *aurp.ZIRspPacket:
|
case *aurp.ZIRspPacket:
|
||||||
// TODO: Integrate info into zone table
|
// TODO: Integrate info into zone table
|
||||||
log.Printf("Learned about these zones: %v", pkt.Zones)
|
log.Printf("Learned about these zones: %v", pkt.Zones)
|
||||||
|
|
||||||
|
case *aurp.GDZLReqPacket:
|
||||||
|
if _, err := p.send(p.tr.NewGDZLRspPacket(-1, nil)); err != nil {
|
||||||
|
log.Printf("Couldn't send GDZL-Rsp packet: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
case *aurp.GDZLRspPacket:
|
||||||
|
log.Printf("Received a GDZL-Rsp, but I wouldn't have sent a GDZL-Req - that's weird")
|
||||||
|
|
||||||
|
case *aurp.GZNReqPacket:
|
||||||
|
if _, err := p.send(p.tr.NewGZNRspPacket(pkt.ZoneName, false, nil)); err != nil {
|
||||||
|
log.Printf("Couldn't send GZN-Rsp packet: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
case *aurp.GZNRspPacket:
|
||||||
|
log.Printf("Received a GZN-Rsp, but I wouldn't have sent a GZN-Req - that's weird")
|
||||||
|
|
||||||
case *aurp.TicklePacket:
|
case *aurp.TicklePacket:
|
||||||
// Immediately respond with Tickle-Ack
|
// Immediately respond with Tickle-Ack
|
||||||
if _, err := p.send(p.tr.NewTickleAckPacket()); err != nil {
|
if _, err := p.send(p.tr.NewTickleAckPacket()); err != nil {
|
||||||
|
|
Loading…
Reference in a new issue