Skip to content

Commit

Permalink
dhcpv6: introduce prepareDHCPv6Modifiers
Browse files Browse the repository at this point in the history
A method to pre-prepare all the modifiers passed over the response.

Signed-off-by: Alona Kaplan <[email protected]>
  • Loading branch information
AlonaKaplan committed Dec 30, 2020
1 parent 69f0e7f commit 20a79e1
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions pkg/virt-launcher/virtwrap/network/dhcpv6/dhcpv6.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ const (
)

type DHCPv6Handler struct {
clientIP net.IP
serverIfaceMac net.HardwareAddr
clientIP net.IP
modifiers []dhcpv6.Modifier
}

func SingleClientDHCPv6Server(clientIP net.IP, serverIfaceName string) error {
Expand All @@ -48,9 +48,11 @@ func SingleClientDHCPv6Server(clientIP net.IP, serverIfaceName string) error {
return fmt.Errorf("couldn't create DHCPv6 server, couldn't get the dhcp6 server interface: %v", err)
}

modifiers := prepareDHCPv6Modifiers(clientIP, iface.HardwareAddr)

handler := &DHCPv6Handler{
clientIP: clientIP,
serverIfaceMac: iface.HardwareAddr,
clientIP: clientIP,
modifiers: modifiers,
}

conn, err := NewConnection(iface)
Expand Down Expand Up @@ -79,18 +81,14 @@ func (h *DHCPv6Handler) ServeDHCPv6(conn net.PacketConn, peer net.Addr, m dhcpv6
var response *dhcpv6.Message
var err error

optIAAddress := dhcpv6.OptIAAddress{IPv6Addr: h.clientIP, PreferredLifetime: infiniteLease, ValidLifetime: infiniteLease}

duid := dhcpv6.Duid{Type: dhcpv6.DUID_LL, HwType: iana.HWTypeEthernet, LinkLayerAddr: h.serverIfaceMac}

dhcpv6Msg := m.(*dhcpv6.Message)
switch dhcpv6Msg.Type() {
case dhcpv6.MessageTypeSolicit:
log.Log.V(4).Info("DHCPv6 - the request has message type Solicit")
response, err = dhcpv6.NewAdvertiseFromSolicit(dhcpv6Msg, dhcpv6.WithIANA(optIAAddress), dhcpv6.WithServerID(duid))
response, err = dhcpv6.NewAdvertiseFromSolicit(dhcpv6Msg, h.modifiers...)
default:
log.Log.V(4).Info("DHCPv6 - non Solicit request recieved")
response, err = dhcpv6.NewReplyFromMessage(dhcpv6Msg, dhcpv6.WithIANA(optIAAddress), dhcpv6.WithServerID(duid))
response, err = dhcpv6.NewReplyFromMessage(dhcpv6Msg, h.modifiers...)
}

if err != nil {
Expand All @@ -102,3 +100,10 @@ func (h *DHCPv6Handler) ServeDHCPv6(conn net.PacketConn, peer net.Addr, m dhcpv6
log.Log.V(4).Errorf("DHCPv6 cannot reply to client: %v", err)
}
}

func prepareDHCPv6Modifiers(clientIP net.IP, serverInterfaceMac net.HardwareAddr) []dhcpv6.Modifier {
optIAAddress := dhcpv6.OptIAAddress{IPv6Addr: clientIP, PreferredLifetime: infiniteLease, ValidLifetime: infiniteLease}
duid := dhcpv6.Duid{Type: dhcpv6.DUID_LL, HwType: iana.HWTypeEthernet, LinkLayerAddr: serverInterfaceMac}

return []dhcpv6.Modifier{dhcpv6.WithIANA(optIAAddress), dhcpv6.WithServerID(duid)}
}

0 comments on commit 20a79e1

Please sign in to comment.