Newer
Older
package packet
import (
"bytes"
)
const (
L1_LAN_HELLO_TYPE = 0x0f
L1_LS_PDU_TYPE = 0x18
L1_CSNP_TYPE = 0x24
L1_PSNP_TYPE = 0x26
L2_LAN_HELLO_TYPE = 0x10
L2_LS_PDU_TYPE = 0x14
L2_CSNP_TYPE = 0x19
L2_PSNP_TYPE = 0x1b
P2P_HELLO = 0x11
DOWN_STATE = 2
INITIALIZING_STATE = 1
var (
AllL1ISS = [6]byte{0x01, 0x80, 0xC2, 0x00, 0x00, 0x14}
AllL2ISS = [6]byte{0x01, 0x80, 0xC2, 0x00, 0x00, 0x15}
AllP2PISS = [6]byte{0x09, 0x00, 0x2b, 0x00, 0x00, 0x05}
AllISS = [6]byte{0x09, 0x00, 0x2B, 0x00, 0x00, 0x05}
AllESS = [6]byte{0x09, 0x00, 0x2B, 0x00, 0x00, 0x04}
)
type ISISPacket struct {
Header *ISISHeader
Body interface{}
}
func Decode(buf *bytes.Buffer) (*ISISPacket, error) {
pkt := &ISISPacket{}
return nil, fmt.Errorf("Unable to decode header: %v", err)
}
pkt.Header = hdr
switch pkt.Header.PDUType {
case P2P_HELLO:
return nil, fmt.Errorf("Unable to decode P2P hello: %v", err)
case L2_LS_PDU_TYPE:
lspdu, err := DecodeLSPDU(buf)
if err != nil {
return nil, fmt.Errorf("Unable to decode LSPDU: %v", err)
}
pkt.Body = lspdu
case L2_CSNP_TYPE:
csnp, err := DecodeCSNP(buf)
if err != nil {
return nil, fmt.Errorf("Unable to decode CSNP: %v", err)
}
pkt.Body = csnp
case L2_PSNP_TYPE:
psnp, err := DecodePSNP(buf)
if err != nil {
return nil, fmt.Errorf("Unable to decode PSNP: %v", err)
}
pkt.Body = psnp
}
return pkt, nil
}