mirror of
https://github.com/rancher/os.git
synced 2025-09-01 14:48:55 +00:00
Add wifi support
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"text/template"
|
||||
|
||||
"github.com/rancher/os/config"
|
||||
"github.com/rancher/os/pkg/docker"
|
||||
@@ -16,6 +20,12 @@ import (
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
var funcMap = template.FuncMap{
|
||||
"addFunc": func(a, b int) string {
|
||||
return strconv.Itoa(a + b)
|
||||
},
|
||||
}
|
||||
|
||||
func Main() {
|
||||
log.InitLogger()
|
||||
|
||||
@@ -36,6 +46,7 @@ func Main() {
|
||||
signal.Notify(signalChan, syscall.SIGTERM)
|
||||
<-signalChan
|
||||
log.Info("Received SIGTERM, shutting down")
|
||||
netconf.StopWpaSupplicant()
|
||||
netconf.StopDhcpcd()
|
||||
}
|
||||
|
||||
@@ -51,6 +62,14 @@ func ApplyNetworkConfig(cfg *config.CloudConfig) {
|
||||
if cfg.Rancher.Network.DHCPTimeout <= 0 {
|
||||
cfg.Rancher.Network.DHCPTimeout = cfg.Rancher.Defaults.Network.DHCPTimeout
|
||||
}
|
||||
|
||||
// In order to handle the STATIC mode in Wi-Fi network, we have to update the dhcpcd.conf file.
|
||||
// https://wiki.archlinux.org/index.php/dhcpcd#Static_profile
|
||||
if len(cfg.Rancher.Network.WifiNetworks) > 0 {
|
||||
generateDhcpcdFiles(cfg)
|
||||
generateWpaFiles(cfg)
|
||||
}
|
||||
|
||||
dhcpSetDNS, err := netconf.ApplyNetworkConfigs(&cfg.Rancher.Network, userSetHostname, userSetDNS)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to apply network configs(by netconf): %v", err)
|
||||
@@ -86,3 +105,50 @@ func ApplyNetworkConfig(cfg *config.CloudConfig) {
|
||||
log.Errorf("Failed to sync hostname: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func generateDhcpcdFiles(cfg *config.CloudConfig) {
|
||||
networks := cfg.Rancher.Network.WifiNetworks
|
||||
interfaces := cfg.Rancher.Network.Interfaces
|
||||
configs := make(map[string]netconf.WifiNetworkConfig)
|
||||
for k, v := range interfaces {
|
||||
if c, ok := networks[v.WifiNetwork]; ok && c.Address != "" {
|
||||
configs[k] = c
|
||||
}
|
||||
}
|
||||
f, err := os.Create(config.DHCPCDConfigFile)
|
||||
defer f.Close()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to open file: %s err: %v", config.DHCPCDConfigFile, err)
|
||||
}
|
||||
templateFiles := []string{config.DHCPCDTemplateFile}
|
||||
templateName := filepath.Base(templateFiles[0])
|
||||
p := template.Must(template.New(templateName).ParseFiles(templateFiles...))
|
||||
if err = p.Execute(f, configs); err != nil {
|
||||
log.Errorf("Failed to wrote wpa configuration to %s: %v", config.DHCPCDConfigFile, err)
|
||||
}
|
||||
}
|
||||
|
||||
func generateWpaFiles(cfg *config.CloudConfig) {
|
||||
networks := cfg.Rancher.Network.WifiNetworks
|
||||
interfaces := cfg.Rancher.Network.Interfaces
|
||||
for k, v := range interfaces {
|
||||
if v.WifiNetwork != "" {
|
||||
configs := make(map[string]netconf.WifiNetworkConfig)
|
||||
filename := fmt.Sprintf(config.WPAConfigFile, k)
|
||||
f, err := os.Create(filename)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to open file: %s err: %v", filename, err)
|
||||
}
|
||||
if c, ok := networks[v.WifiNetwork]; ok {
|
||||
configs[v.WifiNetwork] = c
|
||||
}
|
||||
templateFiles := []string{config.WPATemplateFile}
|
||||
templateName := filepath.Base(templateFiles[0])
|
||||
p := template.Must(template.New(templateName).Funcs(funcMap).ParseFiles(templateFiles...))
|
||||
if err = p.Execute(f, configs); err != nil {
|
||||
log.Errorf("Failed to wrote wpa configuration to %s: %v", filename, err)
|
||||
}
|
||||
f.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user