]> Cypherpunks.ru repositories - gostls13.git/commitdiff
net: add FlagRunning to exactly reflect the states of an interface.
authorJianwei Mao <maojianwei2012@126.com>
Fri, 26 Aug 2022 08:45:23 +0000 (08:45 +0000)
committerGopher Robot <gobot@golang.org>
Sat, 27 Aug 2022 05:42:03 +0000 (05:42 +0000)
Correctly set this flag while parsing the syscall result.

The FlagUp flag can not distinguish the following situations:
1. interface is plugged, automatically up, and in running(UP) state
2. interface is not plugged, administratively or manually set to up,
but in DOWN state

So, We can't distinguish the state of a NIC by the FlagUp flag alone.

Fixes #53482

Change-Id: I43796bea1a7f72d1fddfef914efe603c81995e1b
GitHub-Last-Rev: 686b5d888e97e9b90cf36ac0c15943eb97e125d4
GitHub-Pull-Request: golang/go#53484
Reviewed-on: https://go-review.googlesource.com/c/go/+/413454
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ryan Schuster <shuey19831@gmail.com>
Reviewed-by: Jianwei Mao <maojianwei2020@gmail.com>
Reviewed-by: Damien Neil <dneil@google.com>
api/next/53482.txt [new file with mode: 0644]
src/net/interface.go
src/net/interface_aix.go
src/net/interface_bsd.go
src/net/interface_linux.go
src/net/interface_plan9.go
src/net/interface_solaris.go
src/net/interface_windows.go

diff --git a/api/next/53482.txt b/api/next/53482.txt
new file mode 100644 (file)
index 0000000..a548944
--- /dev/null
@@ -0,0 +1,2 @@
+pkg net, const FlagRunning = 32 #53482\r
+pkg net, const FlagRunning Flags #53482\r
index 0e5d3202c911ec1efe8d3b26b25300b9f5cfb1e0..e1c9a2e2fff2e645ef8c538e6ee13f77448dd398 100644 (file)
@@ -39,11 +39,12 @@ type Interface struct {
 type Flags uint
 
 const (
-       FlagUp           Flags = 1 << iota // interface is up
+       FlagUp           Flags = 1 << iota // interface is administratively up
        FlagBroadcast                      // interface supports broadcast access capability
        FlagLoopback                       // interface is a loopback interface
        FlagPointToPoint                   // interface belongs to a point-to-point link
        FlagMulticast                      // interface supports multicast access capability
+       FlagRunning                        // interface is in running state
 )
 
 var flagNames = []string{
@@ -52,6 +53,7 @@ var flagNames = []string{
        "loopback",
        "pointtopoint",
        "multicast",
+       "running",
 }
 
 func (f Flags) String() string {
index 7ad45d11756a0646096121fdcf200a0e61ecd5e9..f2e967b1e8804df5581a614f65bc33faf743e554 100644 (file)
@@ -101,6 +101,9 @@ func linkFlags(rawFlags int32) Flags {
        if rawFlags&syscall.IFF_UP != 0 {
                f |= FlagUp
        }
+       if rawFlags&syscall.IFF_RUNNING != 0 {
+               f |= FlagRunning
+       }
        if rawFlags&syscall.IFF_BROADCAST != 0 {
                f |= FlagBroadcast
        }
index db7bc756d8cfa597bea4407e7621ee5ec1173141..9b2b42addbb6090bc705b6f5323ae224f085064d 100644 (file)
@@ -59,6 +59,9 @@ func linkFlags(rawFlags int) Flags {
        if rawFlags&syscall.IFF_UP != 0 {
                f |= FlagUp
        }
+       if rawFlags&syscall.IFF_RUNNING != 0 {
+               f |= FlagRunning
+       }
        if rawFlags&syscall.IFF_BROADCAST != 0 {
                f |= FlagBroadcast
        }
index 441ab2f8805a1f8d4f3c9c10295eee0968f78ddc..9112ecc854c74ca4e272c767eb033f899aea949c 100644 (file)
@@ -99,6 +99,9 @@ func linkFlags(rawFlags uint32) Flags {
        if rawFlags&syscall.IFF_UP != 0 {
                f |= FlagUp
        }
+       if rawFlags&syscall.IFF_RUNNING != 0 {
+               f |= FlagRunning
+       }
        if rawFlags&syscall.IFF_BROADCAST != 0 {
                f |= FlagBroadcast
        }
index 957975c265549211e3a6c11bbd7b19bc730f79c5..92b2eed2591bcac7af2f7435514ac3e91aa0ef69 100644 (file)
@@ -95,9 +95,9 @@ func readInterface(i int) (*Interface, error) {
                        }
                }
 
-               ifc.Flags = FlagUp | FlagBroadcast | FlagMulticast
+               ifc.Flags = FlagUp | FlagRunning | FlagBroadcast | FlagMulticast
        } else {
-               ifc.Flags = FlagUp | FlagMulticast | FlagLoopback
+               ifc.Flags = FlagUp | FlagRunning | FlagMulticast | FlagLoopback
        }
 
        return ifc, nil
index f8d1571b900311bd6d34a191d534578e2eaf5d35..32f503f45b29bac6857cd1e93f142747cc0fed4f 100644 (file)
@@ -37,6 +37,9 @@ func linkFlags(rawFlags int) Flags {
        if rawFlags&syscall.IFF_UP != 0 {
                f |= FlagUp
        }
+       if rawFlags&syscall.IFF_RUNNING != 0 {
+               f |= FlagRunning
+       }
        if rawFlags&syscall.IFF_BROADCAST != 0 {
                f |= FlagBroadcast
        }
index 30e90b83c19d3bf8c609550f4bda6410ae8865d4..22a13128499bcf31d8f37ac0741b3a1a3454987c 100644 (file)
@@ -62,6 +62,7 @@ func interfaceTable(ifindex int) ([]Interface, error) {
                        }
                        if aa.OperStatus == windows.IfOperStatusUp {
                                ifi.Flags |= FlagUp
+                               ifi.Flags |= FlagRunning
                        }
                        // For now we need to infer link-layer service
                        // capabilities from media types.