Skip to content

Commit 2b6f593

Browse files
authored
fix: don't restart HNS if the ARP regkey is not changed (#3498)
fix: skip HNS restart if ARP regkey unchanged Signed-off-by: Evan Baker <[email protected]>
1 parent 1734c24 commit 2b6f593

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

cns/service/main.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -799,14 +799,11 @@ func main() {
799799
}
800800

801801
// Setting the remote ARP MAC address to 12-34-56-78-9a-bc on windows for external traffic if HNS is enabled
802-
arpCtx, arpCtxCancel := context.WithTimeout(rootCtx, 30*time.Second)
803-
err = platform.SetSdnRemoteArpMacAddress(arpCtx)
802+
err = platform.SetSdnRemoteArpMacAddress(rootCtx)
804803
if err != nil {
805804
logger.Errorf("Failed to set remote ARP MAC address: %v", err)
806-
arpCtxCancel()
807805
return
808806
}
809-
arpCtxCancel()
810807

811808
// We are only setting the PriorityVLANTag in 'cns.Direct' mode, because it neatly maps today, to 'isUsingMultitenancy'
812809
// In the future, we would want to have a better CNS flag, to explicitly say, this CNS is using multitenancy

platform/os_windows.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,14 @@ func (p *execClient) ExecutePowershellCommandWithContext(ctx context.Context, co
247247

248248
// SetSdnRemoteArpMacAddress sets the regkey for SDNRemoteArpMacAddress needed for multitenancy if hns is enabled
249249
func SetSdnRemoteArpMacAddress(ctx context.Context) error {
250-
if err := setSDNRemoteARPRegKey(); err != nil {
250+
changed, err := setSDNRemoteARPRegKey()
251+
if err != nil {
251252
return err
252253
}
254+
if !changed {
255+
log.Printf("SDNRemoteArpMacAddress regKey already set, skipping HNS restart")
256+
return nil
257+
}
253258
log.Printf("SDNRemoteArpMacAddress regKey set successfully")
254259
if err := restartHNS(ctx); err != nil {
255260
return err
@@ -258,26 +263,28 @@ func SetSdnRemoteArpMacAddress(ctx context.Context) error {
258263
return nil
259264
}
260265

261-
func setSDNRemoteARPRegKey() error {
266+
// setSDNRemoteARPRegKey sets the SDNRemoteArpMacAddress registry key
267+
// returns true if the key was changed, false if unchanged
268+
func setSDNRemoteARPRegKey() (bool, error) {
262269
log.Printf("Setting SDNRemoteArpMacAddress regKey")
263270
// open the registry key
264271
k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Services\hns\State`, registry.READ|registry.SET_VALUE)
265272
if err != nil {
266273
if errors.Is(err, registry.ErrNotExist) {
267-
return nil
274+
return false, nil
268275
}
269-
return errors.Wrap(err, "could not open registry key")
276+
return false, errors.Wrap(err, "could not open registry key")
270277
}
271278
defer k.Close()
272279
// check the key value
273280
if v, _, _ := k.GetStringValue("SDNRemoteArpMacAddress"); v == SDNRemoteArpMacAddress {
274281
log.Printf("SDNRemoteArpMacAddress regKey already set")
275-
return nil // already set
282+
return false, nil // already set
276283
}
277284
if err = k.SetStringValue("SDNRemoteArpMacAddress", SDNRemoteArpMacAddress); err != nil {
278-
return errors.Wrap(err, "could not set registry key")
285+
return false, errors.Wrap(err, "could not set registry key")
279286
}
280-
return nil
287+
return true, nil
281288
}
282289

283290
func restartHNS(ctx context.Context) error {

0 commit comments

Comments
 (0)