mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-28 19:54:35 +00:00
qemu: Add RTC specific types
Instead of open coding the RTC fields, we now have specific types for it. We also have a RTC unit test now. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
e543c3383d
commit
2d736d7173
64
qemu.go
64
qemu.go
@ -329,16 +329,66 @@ func (dev SerialDevice) Valid() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RTCBaseType is the qemu RTC base time type.
|
||||||
|
type RTCBaseType string
|
||||||
|
|
||||||
|
// RTCClock is the qemu RTC clock type.
|
||||||
|
type RTCClock string
|
||||||
|
|
||||||
|
// RTCDriftFix is the qemu RTC drift fix type.
|
||||||
|
type RTCDriftFix string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// UTC is the UTC base time for qemu RTC.
|
||||||
|
UTC RTCBaseType = "utc"
|
||||||
|
|
||||||
|
// LocalTime is the local base time for qemu RTC.
|
||||||
|
LocalTime = "localtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Host is for using the host clock as a reference.
|
||||||
|
Host RTCClock = "host"
|
||||||
|
|
||||||
|
// VM is for using the guest clock as a reference
|
||||||
|
VM = "vm"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Slew is the qemu RTC Drift fix mechanism.
|
||||||
|
Slew RTCDriftFix = "slew"
|
||||||
|
|
||||||
|
// NoDriftFix means we don't want/need to fix qemu's RTC drift.
|
||||||
|
NoDriftFix = "none"
|
||||||
|
)
|
||||||
|
|
||||||
// RTC represents a qemu Real Time Clock configuration.
|
// RTC represents a qemu Real Time Clock configuration.
|
||||||
type RTC struct {
|
type RTC struct {
|
||||||
// Base is the RTC start time.
|
// Base is the RTC start time.
|
||||||
Base string
|
Base RTCBaseType
|
||||||
|
|
||||||
// Clock is the is the RTC clock driver.
|
// Clock is the is the RTC clock driver.
|
||||||
Clock string
|
Clock RTCClock
|
||||||
|
|
||||||
// DriftFix is the drift fixing mechanism.
|
// DriftFix is the drift fixing mechanism.
|
||||||
DriftFix string
|
DriftFix RTCDriftFix
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valid returns true if the RTC structure is valid and complete.
|
||||||
|
func (rtc RTC) Valid() bool {
|
||||||
|
if rtc.Clock != "" {
|
||||||
|
if rtc.Clock != Host && rtc.Clock != VM {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rtc.DriftFix != "" {
|
||||||
|
if rtc.DriftFix != Slew && rtc.DriftFix != NoDriftFix {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// QMPSocket represents a qemu QMP socket configuration.
|
// QMPSocket represents a qemu QMP socket configuration.
|
||||||
@ -725,10 +775,13 @@ func appendCPUs(params []string, config Config) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func appendRTC(params []string, config Config) []string {
|
func appendRTC(params []string, config Config) []string {
|
||||||
if config.RTC.Base != "" {
|
if config.RTC.Valid() == false {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var RTCParams []string
|
var RTCParams []string
|
||||||
|
|
||||||
RTCParams = append(RTCParams, fmt.Sprintf("base=%s", config.RTC.Base))
|
RTCParams = append(RTCParams, fmt.Sprintf("base=%s", string(config.RTC.Base)))
|
||||||
|
|
||||||
if config.RTC.DriftFix != "" {
|
if config.RTC.DriftFix != "" {
|
||||||
RTCParams = append(RTCParams, fmt.Sprintf(",driftfix=%s", config.RTC.DriftFix))
|
RTCParams = append(RTCParams, fmt.Sprintf(",driftfix=%s", config.RTC.DriftFix))
|
||||||
@ -740,7 +793,6 @@ func appendRTC(params []string, config Config) []string {
|
|||||||
|
|
||||||
params = append(params, "-rtc")
|
params = append(params, "-rtc")
|
||||||
params = append(params, strings.Join(RTCParams, ""))
|
params = append(params, strings.Join(RTCParams, ""))
|
||||||
}
|
|
||||||
|
|
||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
|
19
qemu_test.go
19
qemu_test.go
@ -75,6 +75,13 @@ func testAppend(structure interface{}, expected string, t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
params = appendQMPSocket([]string{}, config)
|
params = appendQMPSocket([]string{}, config)
|
||||||
|
|
||||||
|
case RTC:
|
||||||
|
config := Config{
|
||||||
|
RTC: s,
|
||||||
|
}
|
||||||
|
|
||||||
|
params = appendRTC([]string{}, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
result := strings.Join(params, " ")
|
result := strings.Join(params, " ")
|
||||||
@ -281,3 +288,15 @@ func TestAppendStrings(t *testing.T) {
|
|||||||
t.Fatalf("Failed to append parameters [%s] != [%s]", result, qemuString)
|
t.Fatalf("Failed to append parameters [%s] != [%s]", result, qemuString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var rtcString = "-rtc base=utc,driftfix=slew,clock=host"
|
||||||
|
|
||||||
|
func TestAppendRTC(t *testing.T) {
|
||||||
|
rtc := RTC{
|
||||||
|
Base: UTC,
|
||||||
|
Clock: Host,
|
||||||
|
DriftFix: Slew,
|
||||||
|
}
|
||||||
|
|
||||||
|
testAppend(rtc, rtcString, t)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user