Skip to content

Commit 9ec504c

Browse files
Merge pull request #8 from jean-edouard/vwif7
nwd: also update vwif backends
2 parents 56cb219 + 5a8bd4a commit 9ec504c

File tree

3 files changed

+53
-12
lines changed

3 files changed

+53
-12
lines changed

nwd/NetworkSlaveMethods.hs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import Data.Maybe
3030
import Data.Int
3131
import Data.Word
3232
import Data.Bits
33+
import Data.List
3334
import qualified Data.Map as M
3435
import qualified Data.Text.Lazy as TL
3536
import Text.Printf
@@ -150,26 +151,52 @@ getVmNameFromUuid uuid =
150151

151152

152153
xsVifMac :: String -> String -> IO (Maybe String)
153-
xsVifMac gDomid gDevid = xsRead $ printf "/local/domain/%s/device/vif/%s/mac" gDomid gDevid
154+
xsVifMac gDomid gDevid = do
155+
res <- xsRead $ printf "/local/domain/%s/device/vif/%s/mac" gDomid gDevid
156+
case res of
157+
Just _ -> return $ res
158+
Nothing -> xsRead $ printf "/local/domain/%s/device/vwif/%s/mac" gDomid gDevid
154159

155160
xsVifRemove :: String -> String -> IO ()
156-
xsVifRemove gDomid gDevid = xsRm $ printf "/local/domain/%s/device/vif/%s" gDomid gDevid
161+
xsVifRemove gDomid gDevid = do
162+
xsRm $ printf "/local/domain/%s/device/vif/%s" gDomid gDevid
163+
xsRm $ printf "/local/domain/%s/device/vwif/%s" gDomid gDevid
157164

158165
xsBackendVifNode :: String -> String
159166
xsBackendVifNode = printf "/local/domain/%s/backend/vif"
160167

168+
xsBackendVwifNode :: String -> String
169+
xsBackendVwifNode = printf "/local/domain/%s/backend/vwif"
170+
161171
xsVifNetwork :: String -> String -> String -> IO (Maybe String)
162-
xsVifNetwork domid devid backendDomid = xsRead $ printf "%s/%s/%s/bridge" (xsBackendVifNode backendDomid) domid devid
163-
--xsVifMac domid devid backendDomid = xsRead $ printf "%s/%s/%s/mac" (xsBackendVifNode backendDomid) domid devid
172+
xsVifNetwork domid devid backendDomid = do
173+
vif <- xsRead $ printf "%s/%s/%s/bridge" (xsBackendVifNode backendDomid) domid devid
174+
case vif of
175+
Just _ -> return $ vif
176+
Nothing -> xsRead $ printf "%s/%s/%s/bridge" (xsBackendVwifNode backendDomid) domid devid
164177

165178
xsVifState :: String -> String -> String -> IO (Maybe String)
166-
xsVifState domid devid backendDomid = xsRead $ printf "%s/%s/%s/state" (xsBackendVifNode backendDomid) domid devid
179+
xsVifState domid devid backendDomid = do
180+
vif <- xsRead $ printf "%s/%s/%s/state" (xsBackendVifNode backendDomid) domid devid
181+
case vif of
182+
Just _ -> return $ vif
183+
Nothing -> xsRead $ printf "%s/%s/%s/state" (xsBackendVwifNode backendDomid) domid devid
167184

168185
xsVifFrontend :: String -> String -> String -> IO (Maybe String)
169-
xsVifFrontend domid devid backendDomid = xsRead $ printf "%s/%s/%s/frontend" (xsBackendVifNode backendDomid) domid devid
186+
xsVifFrontend domid devid backendDomid = do
187+
vif <- xsRead $ printf "%s/%s/%s/frontend" (xsBackendVifNode backendDomid) domid devid
188+
case vif of
189+
Just _ -> return $ vif
190+
Nothing -> xsRead $ printf "%s/%s/%s/frontend" (xsBackendVwifNode backendDomid) domid devid
191+
192+
rmDups :: (Ord a) => [a] -> [a]
193+
rmDups = map head . group . sort
170194

171195
xsGuestDomains :: String -> IO ([String])
172-
xsGuestDomains backendDomid = xsDir (xsBackendVifNode backendDomid)
196+
xsGuestDomains backendDomid = do
197+
vifNodes <- xsDir (xsBackendVifNode backendDomid)
198+
vwifNodes <- xsDir (xsBackendVwifNode backendDomid)
199+
return $ rmDups (vifNodes ++ vwifNodes)
173200

174201
xsDevIds :: String -> String -> IO ([String])
175202
xsDevIds backendDomid guestDomid = xsDir $ printf "%s/%s" (xsBackendVifNode backendDomid) guestDomid

nwd/XSWifi.hs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,18 @@ nm_802_11_AP_SEC_GROUP_CCMP = 0x80
8383
nm_802_11_AP_SEC_KEY_MGMT_PSK = 0x100
8484
nm_802_11_AP_SEC_KEY_MGMT_802_1X = 0x200
8585

86+
-- Update guest nodes instead of stubdom nodes
87+
-- Note: this serves as a workaround for guest nodes not getting updated
88+
deStubdom :: String -> IO (DomainId)
89+
deStubdom domid = do
90+
target <- xsRead ("/local/domain/" ++ domid ++ "/target")
91+
case target of
92+
Just x -> return (read x)
93+
Nothing -> return (read domid)
94+
8695
-- Query first, then export
87-
wifiXsQueryAndExport :: DomainId -> String -> DomainId -> Rpc ()
88-
wifiXsQueryAndExport slaveDomid slaveObj guestDomid= do -- info "exporting wifi information to xenstore"
96+
wifiXsQueryAndExport' :: DomainId -> String -> DomainId -> Rpc ()
97+
wifiXsQueryAndExport' slaveDomid slaveObj guestDomid = do -- info "exporting wifi information to xenstore"
8998
wifiQueryNm slaveDomid slaveObj >>= f
9099
where
91100
f Nothing = liftIO $ do
@@ -97,8 +106,13 @@ wifiXsQueryAndExport slaveDomid slaveObj guestDomid= do -- info "exporting wifi
97106
wifiXsExportAp (activeApPath guestDomid) info
98107
wifiXsExportFakeInfoAp guestDomid
99108

100-
activeApPath domid = "/local/domain/" ++ show guestDomid ++ "/wlan/0"
101-
fakeInfoApPath domid = "/local/domain/" ++ show guestDomid ++ "/wlan/1"
109+
activeApPath domid = "/local/domain/" ++ show domid ++ "/wlan/0"
110+
fakeInfoApPath domid = "/local/domain/" ++ show domid ++ "/wlan/1"
111+
112+
wifiXsQueryAndExport :: DomainId -> String -> DomainId -> Rpc ()
113+
wifiXsQueryAndExport slaveDomid slaveObj guestOrStubdomDomid = do
114+
guestDomid <- liftIO $ deStubdom (show guestOrStubdomDomid)
115+
wifiXsQueryAndExport' slaveDomid slaveObj guestDomid
102116

103117
wifiQueryNm domid slaveNw = do
104118
apInfo <- withNetworkSlave domid (NC.comCitrixXenclientNetworkConfigGetExtraInfo slaveService slaveNw)

nws/NetworkUtils.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ listPhyInterfaces = catMaybes <$> (mapM isPhy =<< sysfsnetOrderedContents)
127127
isVifOrTunInterface :: FilePath -> IO (Bool)
128128
isVifOrTunInterface iface = do
129129
devtype <- strip <$> getFileContents (sysfsnet </> iface </> "device" </> "devtype")
130-
return ((devtype =~ "vif" :: Bool) || (iface =~ "tap" :: Bool))
130+
return ((devtype =~ "vif" :: Bool) || (devtype =~ "vwif" :: Bool) || (iface =~ "tap" :: Bool))
131131

132132
isBridgeInterface :: String -> IO (Bool)
133133
isBridgeInterface iface = doesDirectoryExist (sysfsnet </> iface </> "bridge")

0 commit comments

Comments
 (0)