blob: 0e649398e1910c485bab40a8640c98a410f055a5 [file] [log] [blame]
Neale Rannsfca0c242017-01-13 07:57:46 -08001diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py
2index 4cb9291..a1adcfc 100644
3--- a/scapy/layers/dhcp6.py
4+++ b/scapy/layers/dhcp6.py
5@@ -74,7 +74,9 @@ dhcp6opts = { 1: "CLIENTID",
6 36: "OPTION_GEOCONF_CIVIC", #RFC-ietf-geopriv-dhcp-civil-09.txt
7 37: "OPTION_REMOTE_ID", #RFC4649
8 38: "OPTION_SUBSCRIBER_ID", #RFC4580
9- 39: "OPTION_CLIENT_FQDN" } #RFC4704
10+ 39: "OPTION_CLIENT_FQDN", #RFC4704
11+ 68: "OPTION_VSS", #RFC6607
12+ 79: "OPTION_CLIENT_LINKLAYER_ADDR" } #RFC6939
13
14 dhcp6opts_by_code = { 1: "DHCP6OptClientId",
15 2: "DHCP6OptServerId",
16@@ -116,12 +118,14 @@ dhcp6opts_by_code = { 1: "DHCP6OptClientId",
17 #40: "DHCP6OptPANAAgent", #RFC-ietf-dhc-paa-option-05.txt
18 #41: "DHCP6OptNewPOSIXTimeZone, #RFC4833
19 #42: "DHCP6OptNewTZDBTimeZone, #RFC4833
20- 43: "DHCP6OptRelayAgentERO" #RFC4994
21+ 43: "DHCP6OptRelayAgentERO", #RFC4994
22 #44: "DHCP6OptLQQuery", #RFC5007
23 #45: "DHCP6OptLQClientData", #RFC5007
24 #46: "DHCP6OptLQClientTime", #RFC5007
25 #47: "DHCP6OptLQRelayData", #RFC5007
26 #48: "DHCP6OptLQClientLink", #RFC5007
27+ 68: "DHCP6OptVSS", #RFC6607
28+ 79: "DHCP6OptClientLinkLayerAddr", #RFC6939
29 }
30
31
32@@ -838,6 +842,26 @@ class DHCP6OptRelayAgentERO(_DHCP6OptGuessPayload): # RFC4994
33 _OptReqListField("reqopts", [23, 24],
34 length_from = lambda pkt: pkt.optlen) ]
35
36+# "Client link-layer address type. The link-layer type MUST be a valid hardware
37+# type assigned by the IANA, as described in [RFC0826]
38+class DHCP6OptClientLinkLayerAddr(_DHCP6OptGuessPayload): #RFC6939
39+ name = "DHCP6 Option - Client Link Layer address"
40+ fields_desc = [ ShortEnumField("optcode", 79, dhcp6opts),
41+ FieldLenField("optlen", None, length_of="clladdr",
42+ adjust = lambda pkt,x: x+1),
43+ ShortField("lltype", 1), # ethernet
44+ _LLAddrField("clladdr", ETHER_ANY) ]
45+
46+# Virtual Subnet selection
47+class DHCP6OptVSS(_DHCP6OptGuessPayload): #RFC6607
48+ name = "DHCP6 Option - Virtual Subnet Selection"
49+ fields_desc = [ ShortEnumField("optcode", 68, dhcp6opts),
50+ FieldLenField("optlen", None, length_of="data",
51+ adjust = lambda pkt,x: x+1),
52+ ByteField("type", 255), # Default Global/default table
53+ StrLenField("data", "",
54+ length_from = lambda pkt: pkt.optlen) ]
55+
56 #####################################################################
57 ### DHCPv6 messages ###
58 #####################################################################