Neale Ranns | fca0c24 | 2017-01-13 07:57:46 -0800 | [diff] [blame] | 1 | diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py |
| 2 | index 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 | ##################################################################### |