88 "fmt"
99 "net"
1010 "net/http"
11+ "runtime"
1112 "sync"
1213 "time"
1314
@@ -157,6 +158,7 @@ func (service *HTTPRestService) Start(config *common.ServiceConfig) error {
157158 listener .AddHandler (cns .DetachContainerFromNetwork , service .detachNetworkContainerFromNetwork )
158159 listener .AddHandler (cns .CreateHnsNetworkPath , service .createHnsNetwork )
159160 listener .AddHandler (cns .DeleteHnsNetworkPath , service .deleteHnsNetwork )
161+ listener .AddHandler (cns .NumberOfCPUCoresPath , service .getNumberOfCPUCores )
160162
161163 // handlers for v0.2
162164 listener .AddHandler (cns .V2Prefix + cns .SetEnvironmentPath , service .setEnvironment )
@@ -177,6 +179,7 @@ func (service *HTTPRestService) Start(config *common.ServiceConfig) error {
177179 listener .AddHandler (cns .V2Prefix + cns .DetachContainerFromNetwork , service .detachNetworkContainerFromNetwork )
178180 listener .AddHandler (cns .V2Prefix + cns .CreateHnsNetworkPath , service .createHnsNetwork )
179181 listener .AddHandler (cns .V2Prefix + cns .DeleteHnsNetworkPath , service .deleteHnsNetwork )
182+ listener .AddHandler (cns .V2Prefix + cns .NumberOfCPUCoresPath , service .getNumberOfCPUCores )
180183
181184 log .Printf ("[Azure CNS] Listening." )
182185 return nil
@@ -1573,3 +1576,34 @@ func (service *HTTPRestService) getNetPluginDetails() *networkcontainers.NetPlug
15731576 configPath , _ := service .GetOption (acn .OptNetPluginConfigFile ).(string )
15741577 return networkcontainers .NewNetPluginConfiguration (pluginBinPath , configPath )
15751578}
1579+
1580+ // Retrieves the number of logic processors on a node. It will be primarily
1581+ // used to enforce per VM delegated NIC limit by DNC.
1582+ func (service * HTTPRestService ) getNumberOfCPUCores (w http.ResponseWriter , r * http.Request ) {
1583+ log .Printf ("[Azure-CNS] getNumberOfCPUCores" )
1584+ log .Request (service .Name , "getNumberOfCPUCores" , nil )
1585+
1586+ var (
1587+ num int
1588+ returnCode int
1589+ errMsg string
1590+ )
1591+
1592+ switch r .Method {
1593+ case "GET" :
1594+ num = runtime .NumCPU ()
1595+ default :
1596+ errMsg = "[Azure-CNS] getNumberOfCPUCores API expects a GET."
1597+ returnCode = UnsupportedVerb
1598+ }
1599+
1600+ resp := cns.Response {ReturnCode : returnCode , Message : errMsg }
1601+ numOfCPUCoresResp := cns.NumOfCPUCoresResponse {
1602+ Response : resp ,
1603+ NumOfCPUCores : num ,
1604+ }
1605+
1606+ err := service .Listener .Encode (w , & numOfCPUCoresResp )
1607+
1608+ log .Response (service .Name , numOfCPUCoresResp , resp .ReturnCode , ReturnCodeToString (resp .ReturnCode ), err )
1609+ }
0 commit comments