diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-22 13:46:15 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-22 13:46:15 +0100 |
commit | 6a209998cd6c19d770a4b9b28e94901f9521c4de (patch) | |
tree | 253bb724cbb0a24b7167352784108aa4b8f049ce | |
parent | 6068e7b2a3422d7d892689e1eb72c78dd1eb64a8 (diff) |
only destructure ia_prefix once
-rw-r--r-- | src/main.rs | 93 |
1 files changed, 33 insertions, 60 deletions
diff --git a/src/main.rs b/src/main.rs index e7f660e..6042ba0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -380,6 +380,15 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R println!("[info] -> solicit"); } Packet::Request => { + let DhcpOption::IAPrefix(ia_prefix) = dhcp6 + .iapd + .opts + .get(OptionCode::IAPrefix) + .ok_or(Error::NoIAPrefix)? + else { + unreachable!() + }; + let mut request = Message::new_with_id(MessageType::Request, dhcp6.xid); let opts = request.opts_mut(); @@ -395,26 +404,8 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R opts: vec![DhcpOption::IAPrefix(IAPrefix { preferred_lifetime: 0, valid_lifetime: 0, - prefix_len: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_len - } else { - unreachable!() - }, - prefix_ip: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_ip - } else { - unreachable!() - }, + prefix_len: ia_prefix.prefix_len, + prefix_ip: ia_prefix.prefix_ip, opts: Default::default(), })] .into_iter() @@ -429,6 +420,15 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R println!("[info] -> request"); } Packet::Renew => { + let DhcpOption::IAPrefix(ia_prefix) = dhcp6 + .iapd + .opts + .get(OptionCode::IAPrefix) + .ok_or(Error::NoIAPrefix)? + else { + unreachable!() + }; + let mut renew = Message::new_with_id(MessageType::Renew, dhcp6.xid); let opts = renew.opts_mut(); @@ -444,26 +444,8 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R opts: vec![DhcpOption::IAPrefix(IAPrefix { preferred_lifetime: 0, valid_lifetime: 0, - prefix_len: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_len - } else { - unreachable!() - }, - prefix_ip: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_ip - } else { - unreachable!() - }, + prefix_len: ia_prefix.prefix_len, + prefix_ip: ia_prefix.prefix_ip, opts: Default::default(), })] .into_iter() @@ -478,6 +460,15 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R println!("[info] -> renew"); } Packet::Rebind => { + let DhcpOption::IAPrefix(ia_prefix) = dhcp6 + .iapd + .opts + .get(OptionCode::IAPrefix) + .ok_or(Error::NoIAPrefix)? + else { + unreachable!() + }; + let mut rebind = Message::new_with_id(MessageType::Rebind, dhcp6.xid); let opts = rebind.opts_mut(); @@ -492,26 +483,8 @@ async fn do_send_dhcp6(dhcp6: &mut Dhcp6, sock: &UdpSocket, packet: Packet) -> R opts: vec![DhcpOption::IAPrefix(IAPrefix { preferred_lifetime: 0, valid_lifetime: 0, - prefix_len: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_len - } else { - unreachable!() - }, - prefix_ip: if let DhcpOption::IAPrefix(ia_prefix) = dhcp6 - .iapd - .opts - .get(OptionCode::IAPrefix) - .ok_or(Error::NoIAPrefix)? - { - ia_prefix.prefix_ip - } else { - unreachable!() - }, + prefix_len: ia_prefix.prefix_len, + prefix_ip: ia_prefix.prefix_ip, opts: Default::default(), })] .into_iter() |