summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dhcpv4/ztpv4/ztp.go10
-rw-r--r--dhcpv4/ztpv4/ztp_test.go10
2 files changed, 20 insertions, 0 deletions
diff --git a/dhcpv4/ztpv4/ztp.go b/dhcpv4/ztpv4/ztp.go
index ecb63c6..8ab3a8e 100644
--- a/dhcpv4/ztpv4/ztp.go
+++ b/dhcpv4/ztpv4/ztp.go
@@ -68,6 +68,16 @@ func parseClassIdentifier(packet *dhcpv4.DHCPv4) (*VendorData, error) {
vd.VendorName = p[0]
return vd, nil
+ // Juniper:tttt-ttt:DN817
+ case strings.HasPrefix(vc, "Juniper:"):
+ p := strings.Split(vc, ":")
+ if len(p) == 3 {
+ vd.VendorName = p[0]
+ vd.Model = p[1]
+ vd.Serial = p[2]
+ return vd, nil
+ }
+ return nil, fmt.Errorf("%w got '%s'", errVendorOptionMalformed, vc)
// For Ciena the class identifier (opt 60) is written in the following format:
// {vendor iana code}-{product}-{type}
diff --git a/dhcpv4/ztpv4/ztp_test.go b/dhcpv4/ztpv4/ztp_test.go
index 5d8ae8d..8210b12 100644
--- a/dhcpv4/ztpv4/ztp_test.go
+++ b/dhcpv4/ztpv4/ztp_test.go
@@ -42,6 +42,16 @@ func TestParseClassIdentifier(t *testing.T) {
},
{name: "juniperNoSerial", vc: "Juniper-qfx10008", fail: true},
{
+ name: "juniperHostnameSerialv2",
+ vc: "Juniper:ttttt-ttt:D12345",
+ want: &VendorData{VendorName: "Juniper", Model: "ttttt-ttt", Serial: "D12345"},
+ },
+ {
+ name: "juniperHostnameSerialv2Invalid",
+ vc: "Juniper:1",
+ fail: true,
+ },
+ {
name: "zpe",
vc: "ZPESystems:NSC:001234567",
want: &VendorData{VendorName: "ZPESystems", Model: "NSC", Serial: "001234567"},