Files
cloudpods/pkg/compute/models/host_taps.go
T
2024-04-10 01:33:25 +08:00

92 lines
2.4 KiB
Go

// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import (
"context"
"sort"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/mcclient"
)
func (h *SHost) GetDetailsTapConfig(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (api.SHostTapConfig, error) {
conf := api.SHostTapConfig{}
srvs, err := NetTapServiceManager.getEnabledTapServiceOnHost(h.Id)
if err != nil {
return conf, errors.Wrap(err, "NetTapServiceManager.getEnabledTapServiceOnHost")
}
for _, srv := range srvs {
tapConf, err := srv.getConfig()
if err != nil {
return conf, errors.Wrap(err, "srv.getConfig")
}
conf.Taps = append(conf.Taps, tapConf)
}
flows, err := NetTapFlowManager.getEnabledTapFlowsOnHost(h.Id)
if err != nil {
return conf, errors.Wrap(err, "NetTapFlowManager.getEnabledTapFlowsOnHost")
}
mirrors := make([]api.SMirrorConfig, 0)
for _, flow := range flows {
mirror, err := flow.getMirrorConfig(true)
if err != nil {
if errors.Cause(err) == errors.ErrNotFound {
continue
} else {
return conf, errors.Wrap(err, "flow.getMirrorConfig")
}
}
mirrors = append(mirrors, mirror)
}
sort.Sort(sMirrorConfigs(mirrors))
conf.Mirrors = mirrors // groupMirrorConfig(mirrors)
return conf, nil
}
func (g *SGuest) getTapNicJsonDesc(ctx context.Context, p *api.GuestnetworkJsonDesc) *api.GuestnetworkJsonDesc {
srv := NetTapServiceManager.getEnabledTapServiceByGuestId(g.Id)
if srv == nil {
return nil
}
var driver string
var index int
if p == nil {
driver = "virtio"
index = 0
} else {
driver = p.Driver
index = p.Index + 1
}
desc := &api.GuestnetworkJsonDesc{
GuestnetworkBaseDesc: api.GuestnetworkBaseDesc{
Mac: srv.MacAddr,
Virtual: true,
Index: index,
Bridge: api.HostTapBridge,
Ifname: srv.Ifname,
},
Driver: driver,
NumQueues: 1,
}
return desc
}