Tizen_4.0 base
[platform/upstream/docker-engine.git] / pkg / parsers / kernel / kernel_unix.go
1 // +build linux freebsd solaris openbsd
2
3 // Package kernel provides helper function to get, parse and compare kernel
4 // versions for different platforms.
5 package kernel
6
7 import (
8         "bytes"
9
10         "github.com/Sirupsen/logrus"
11 )
12
13 // GetKernelVersion gets the current kernel version.
14 func GetKernelVersion() (*VersionInfo, error) {
15         uts, err := uname()
16         if err != nil {
17                 return nil, err
18         }
19
20         release := make([]byte, len(uts.Release))
21
22         i := 0
23         for _, c := range uts.Release {
24                 release[i] = byte(c)
25                 i++
26         }
27
28         // Remove the \x00 from the release for Atoi to parse correctly
29         release = release[:bytes.IndexByte(release, 0)]
30
31         return ParseRelease(string(release))
32 }
33
34 // CheckKernelVersion checks if current kernel is newer than (or equal to)
35 // the given version.
36 func CheckKernelVersion(k, major, minor int) bool {
37         if v, err := GetKernelVersion(); err != nil {
38                 logrus.Warnf("error getting kernel version: %s", err)
39         } else {
40                 if CompareKernelVersion(*v, VersionInfo{Kernel: k, Major: major, Minor: minor}) < 0 {
41                         return false
42                 }
43         }
44         return true
45 }