@@ -3,7 +3,6 @@ package config
33import (
44 "errors"
55 "fmt"
6- "io/ioutil"
76 "os"
87 "os/exec"
98 "path/filepath"
@@ -172,40 +171,6 @@ func sigLookup(s string) (syscall.Signal, error) {
172171 return sig , nil
173172}
174173
175- func pidFile (path string ) (int , error ) {
176- if _ , err := os .Stat (path ); os .IsNotExist (err ) {
177- return 0 , fmt .Errorf ("pid file not found" )
178- }
179- pidTxt , err := ioutil .ReadFile (path )
180- if err != nil {
181- return 0 , fmt .Errorf ("pid file cannot be read" )
182- }
183-
184- pid , err := strconv .Atoi (string (pidTxt ))
185- if err != nil {
186- return 0 , fmt .Errorf ("pid file does not contain an integer" )
187- }
188-
189- return pid , nil
190- }
191-
192- func uuidFile (path string ) (uuid.UUID , error ) {
193- if _ , err := os .Stat (path ); os .IsNotExist (err ) {
194- return [16 ]byte {}, fmt .Errorf ("uuid file not found" )
195- }
196- uuidTxt , err := ioutil .ReadFile (path )
197- if err != nil {
198- return [16 ]byte {}, fmt .Errorf ("uuid file cannot be read" )
199- }
200-
201- uuid , err := uuid .Parse (string (uuidTxt ))
202- if err != nil {
203- return [16 ]byte {}, fmt .Errorf ("uuid file does not contain an UUID" )
204- }
205-
206- return uuid , nil
207- }
208-
209174func (v * VMConfig ) Cli () []string {
210175
211176 var args []string
@@ -307,6 +272,13 @@ func (v *VMConfig) defaults(configDir string, name string) error {
307272 }
308273 v .UUID = UUID .String ()
309274 }
275+
276+ for _ , net := range v .Network {
277+ if err := net .defaults (v .RunDir ); err != nil {
278+ return err
279+ }
280+ }
281+
310282 return nil
311283}
312284
@@ -494,6 +466,36 @@ func (n *NetConf) validate() error {
494466 return nil
495467}
496468
469+ func (n * NetConf ) defaults (runDir string ) error {
470+ switch n .Driver {
471+
472+ case "virtio-tap" :
473+ if n .MAC == "" {
474+ MAC , err := hwaddrFile (runDir + "/" + n .MemberOf + "_mac" )
475+
476+ if err != nil {
477+ MAC , err = genMAC ()
478+ if err != nil {
479+ return err
480+ }
481+
482+ w , err := os .Create (runDir + "/" + n .MemberOf + "_mac" )
483+ if err != nil {
484+ return err
485+ }
486+
487+ defer w .Close ()
488+
489+ if _ , err := w .WriteString (MAC .String ()); err != nil {
490+ return err
491+ }
492+ }
493+ n .MAC = MAC .String ()
494+ }
495+ }
496+ return nil
497+ }
498+
497499func (n * NetConf ) devicePath () string {
498500 if n .Device [:1 ] == "/" {
499501 return n .Device
0 commit comments