@@ -6,10 +6,11 @@ use crate::time::{Duration, Instant};
6
6
use crate :: wire:: dhcpv4:: field as dhcpv4_field;
7
7
use crate :: wire:: {
8
8
DhcpMessageType , DhcpPacket , DhcpRepr , IpAddress , IpProtocol , Ipv4Address , Ipv4Cidr , Ipv4Repr ,
9
- UdpRepr , DHCP_CLIENT_PORT , DHCP_MAX_DNS_SERVER_COUNT , DHCP_SERVER_PORT , UDP_HEADER_LEN ,
9
+ UdpRepr , DHCP_CLIENT_PORT , DHCP_MAX_DNS_SERVER_COUNT , DHCP_MAX_DOMAIN_NAME_LEN ,
10
+ DHCP_SERVER_PORT , UDP_HEADER_LEN ,
10
11
} ;
11
12
use crate :: wire:: { DhcpOption , HardwareAddress } ;
12
- use heapless:: Vec ;
13
+ use heapless:: { String , Vec } ;
13
14
14
15
#[ cfg( feature = "async" ) ]
15
16
use super :: WakerRegistration ;
@@ -22,6 +23,7 @@ const DEFAULT_PARAMETER_REQUEST_LIST: &[u8] = &[
22
23
dhcpv4_field:: OPT_SUBNET_MASK ,
23
24
dhcpv4_field:: OPT_ROUTER ,
24
25
dhcpv4_field:: OPT_DOMAIN_NAME_SERVER ,
26
+ dhcpv4_field:: OPT_DOMAIN_NAME ,
25
27
] ;
26
28
27
29
/// IPv4 configuration data provided by the DHCP server.
@@ -38,6 +40,8 @@ pub struct Config<'a> {
38
40
pub router : Option < Ipv4Address > ,
39
41
/// DNS servers
40
42
pub dns_servers : Vec < Ipv4Address , DHCP_MAX_DNS_SERVER_COUNT > ,
43
+ /// Domain name
44
+ pub domain_name : Option < String < DHCP_MAX_DOMAIN_NAME_LEN > > ,
41
45
/// Received DHCP packet
42
46
pub packet : Option < DhcpPacket < & ' a [ u8 ] > > ,
43
47
}
@@ -494,6 +498,7 @@ impl<'a> Socket<'a> {
494
498
address : Ipv4Cidr :: new ( dhcp_repr. your_ip , prefix_len) ,
495
499
router : dhcp_repr. router ,
496
500
dns_servers,
501
+ domain_name : dhcp_repr. domain_name . clone ( ) ,
497
502
packet : None ,
498
503
} ;
499
504
@@ -589,6 +594,7 @@ impl<'a> Socket<'a> {
589
594
renew_duration : None ,
590
595
rebind_duration : None ,
591
596
dns_servers : None ,
597
+ domain_name : None ,
592
598
additional_options : self . outgoing_options ,
593
599
} ;
594
600
@@ -739,6 +745,7 @@ impl<'a> Socket<'a> {
739
745
address : state. config . address ,
740
746
router : state. config . router ,
741
747
dns_servers : state. config . dns_servers . clone ( ) ,
748
+ domain_name : state. config . domain_name . clone ( ) ,
742
749
packet : self
743
750
. receive_packet_buffer
744
751
. as_deref ( )
@@ -779,6 +786,7 @@ impl<'a> Socket<'a> {
779
786
#[ cfg( test) ]
780
787
mod test {
781
788
789
+ use core:: str:: FromStr ;
782
790
use std:: ops:: { Deref , DerefMut } ;
783
791
784
792
use super :: * ;
@@ -886,6 +894,7 @@ mod test {
886
894
const DNS_IP_2 : Ipv4Address = Ipv4Address ( [ 1 , 1 , 1 , 2 ] ) ;
887
895
const DNS_IP_3 : Ipv4Address = Ipv4Address ( [ 1 , 1 , 1 , 3 ] ) ;
888
896
const DNS_IPS : & [ Ipv4Address ] = & [ DNS_IP_1 , DNS_IP_2 , DNS_IP_3 ] ;
897
+ const DOMAIN_NAME : & str = "my.domain" ;
889
898
890
899
const MASK_24 : Ipv4Address = Ipv4Address ( [ 255 , 255 , 255 , 0 ] ) ;
891
900
@@ -969,6 +978,7 @@ mod test {
969
978
server_identifier : None ,
970
979
parameter_request_list : None ,
971
980
dns_servers : None ,
981
+ domain_name : None ,
972
982
max_size : None ,
973
983
renew_duration : None ,
974
984
rebind_duration : None ,
@@ -979,7 +989,7 @@ mod test {
979
989
const DHCP_DISCOVER : DhcpRepr = DhcpRepr {
980
990
message_type : DhcpMessageType :: Discover ,
981
991
client_identifier : Some ( MY_MAC ) ,
982
- parameter_request_list : Some ( & [ 1 , 3 , 6 ] ) ,
992
+ parameter_request_list : Some ( & [ 1 , 3 , 6 , 15 ] ) ,
983
993
max_size : Some ( 1432 ) ,
984
994
..DHCP_DEFAULT
985
995
} ;
@@ -994,6 +1004,7 @@ mod test {
994
1004
router : Some ( SERVER_IP ) ,
995
1005
subnet_mask : Some ( MASK_24 ) ,
996
1006
dns_servers : Some ( Vec :: from_slice ( DNS_IPS ) . unwrap ( ) ) ,
1007
+ domain_name : Some ( String :: from_str ( DOMAIN_NAME ) . unwrap ( ) ) ,
997
1008
lease_duration : Some ( 1000 ) ,
998
1009
999
1010
..DHCP_DEFAULT
@@ -1007,7 +1018,7 @@ mod test {
1007
1018
max_size : Some ( 1432 ) ,
1008
1019
1009
1020
requested_ip : Some ( MY_IP ) ,
1010
- parameter_request_list : Some ( & [ 1 , 3 , 6 ] ) ,
1021
+ parameter_request_list : Some ( & [ 1 , 3 , 6 , 15 ] ) ,
1011
1022
..DHCP_DEFAULT
1012
1023
} ;
1013
1024
@@ -1021,6 +1032,7 @@ mod test {
1021
1032
router : Some ( SERVER_IP ) ,
1022
1033
subnet_mask : Some ( MASK_24 ) ,
1023
1034
dns_servers : Some ( Vec :: from_slice ( DNS_IPS ) . unwrap ( ) ) ,
1035
+ domain_name : Some ( String :: from_str ( DOMAIN_NAME ) . unwrap ( ) ) ,
1024
1036
lease_duration : Some ( 1000 ) ,
1025
1037
1026
1038
..DHCP_DEFAULT
@@ -1042,7 +1054,7 @@ mod test {
1042
1054
max_size : Some ( 1432 ) ,
1043
1055
1044
1056
requested_ip : None ,
1045
- parameter_request_list : Some ( & [ 1 , 3 , 6 ] ) ,
1057
+ parameter_request_list : Some ( & [ 1 , 3 , 6 , 15 ] ) ,
1046
1058
..DHCP_DEFAULT
1047
1059
} ;
1048
1060
@@ -1054,7 +1066,7 @@ mod test {
1054
1066
max_size : Some ( 1432 ) ,
1055
1067
1056
1068
requested_ip : None ,
1057
- parameter_request_list : Some ( & [ 1 , 3 , 6 ] ) ,
1069
+ parameter_request_list : Some ( & [ 1 , 3 , 6 , 15 ] ) ,
1058
1070
..DHCP_DEFAULT
1059
1071
} ;
1060
1072
@@ -1097,6 +1109,7 @@ mod test {
1097
1109
} ,
1098
1110
address : Ipv4Cidr :: new ( MY_IP , 24 ) ,
1099
1111
dns_servers : Vec :: from_slice ( DNS_IPS ) . unwrap ( ) ,
1112
+ domain_name : Some ( String :: from_str ( DOMAIN_NAME ) . unwrap ( ) ) ,
1100
1113
router : Some ( SERVER_IP ) ,
1101
1114
packet : None ,
1102
1115
} ,
@@ -1132,6 +1145,7 @@ mod test {
1132
1145
} ,
1133
1146
address: Ipv4Cidr :: new( MY_IP , 24 ) ,
1134
1147
dns_servers: Vec :: from_slice( DNS_IPS ) . unwrap( ) ,
1148
+ domain_name: Some ( String :: from_str( DOMAIN_NAME ) . unwrap( ) ) ,
1135
1149
router: Some ( SERVER_IP ) ,
1136
1150
packet: None ,
1137
1151
} ) )
@@ -1170,6 +1184,7 @@ mod test {
1170
1184
} ,
1171
1185
address: Ipv4Cidr :: new( MY_IP , 24 ) ,
1172
1186
dns_servers: Vec :: from_slice( DNS_IPS ) . unwrap( ) ,
1187
+ domain_name: Some ( String :: from_str( DOMAIN_NAME ) . unwrap( ) ) ,
1173
1188
router: Some ( SERVER_IP ) ,
1174
1189
packet: None ,
1175
1190
} ) )
0 commit comments