@@ -10,6 +10,7 @@ import (
10
10
"github.com/gorilla/mux"
11
11
"github.com/lima-vm/lima/pkg/guestagent"
12
12
"github.com/lima-vm/lima/pkg/guestagent/api/server"
13
+ "github.com/lima-vm/lima/pkg/guestagent/serialport"
13
14
"github.com/mdlayher/vsock"
14
15
"github.com/sirupsen/logrus"
15
16
"github.com/spf13/cobra"
@@ -26,16 +27,24 @@ func newDaemonCommand() *cobra.Command {
26
27
return daemonCommand
27
28
}
28
29
30
+ var (
31
+ vSockPort = 0
32
+
33
+ qemuFile = "/dev/virtio-ports/lima.guest_agent.0"
34
+ )
35
+
29
36
func daemonAction (cmd * cobra.Command , _ []string ) error {
30
- socket := "/run/lima-guestagent.sock"
31
37
tick , err := cmd .Flags ().GetDuration ("tick" )
32
38
if err != nil {
33
39
return err
34
40
}
35
- vSockPort , err := cmd .Flags ().GetInt ("vsock-port" )
41
+ vSockPortOverride , err := cmd .Flags ().GetInt ("vsock-port" )
36
42
if err != nil {
37
43
return err
38
44
}
45
+ if vSockPortOverride != 0 {
46
+ vSockPort = vSockPortOverride
47
+ }
39
48
if tick == 0 {
40
49
return errors .New ("tick must be specified" )
41
50
}
@@ -62,29 +71,22 @@ func daemonAction(cmd *cobra.Command, _ []string) error {
62
71
r := mux .NewRouter ()
63
72
server .AddRoutes (r , backend )
64
73
srv := & http.Server {Handler : r }
65
- err = os .RemoveAll (socket )
66
- if err != nil {
67
- return err
68
- }
69
74
70
75
var l net.Listener
71
- if vSockPort != 0 {
72
- vsockL , err := vsock .Listen (uint32 ( vSockPort ), nil )
76
+ if _ , err := os . Stat ( qemuFile ); err == nil {
77
+ qemuL , err := serialport .Listen (qemuFile )
73
78
if err != nil {
74
79
return err
75
80
}
76
- l = vsockL
77
- logrus .Infof ("serving the guest agent on vsock port : %d " , vSockPort )
78
- } else {
79
- socketL , err := net .Listen ("unix" , socket )
81
+ l = qemuL
82
+ logrus .Infof ("serving the guest agent on qemu serial file : %s " , qemuFile )
83
+ } else if vSockPort != 0 {
84
+ vsockL , err := vsock .Listen (uint32 ( vSockPort ), nil )
80
85
if err != nil {
81
86
return err
82
87
}
83
- if err := os .Chmod (socket , 0o777 ); err != nil {
84
- return err
85
- }
86
- l = socketL
87
- logrus .Infof ("serving the guest agent on %q" , socket )
88
+ l = vsockL
89
+ logrus .Infof ("serving the guest agent on vsock port: %d" , vSockPort )
88
90
}
89
91
return srv .Serve (l )
90
92
}
0 commit comments