1/*
2Copyright (c) 2015 VMware, Inc. All Rights Reserved.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8    http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package object
18
19import (
20	"context"
21
22	"github.com/vmware/govmomi/vim25"
23	"github.com/vmware/govmomi/vim25/methods"
24	"github.com/vmware/govmomi/vim25/types"
25)
26
27type HostNetworkSystem struct {
28	Common
29}
30
31func NewHostNetworkSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostNetworkSystem {
32	return &HostNetworkSystem{
33		Common: NewCommon(c, ref),
34	}
35}
36
37// AddPortGroup wraps methods.AddPortGroup
38func (o HostNetworkSystem) AddPortGroup(ctx context.Context, portgrp types.HostPortGroupSpec) error {
39	req := types.AddPortGroup{
40		This:    o.Reference(),
41		Portgrp: portgrp,
42	}
43
44	_, err := methods.AddPortGroup(ctx, o.c, &req)
45	if err != nil {
46		return err
47	}
48
49	return nil
50}
51
52// AddServiceConsoleVirtualNic wraps methods.AddServiceConsoleVirtualNic
53func (o HostNetworkSystem) AddServiceConsoleVirtualNic(ctx context.Context, portgroup string, nic types.HostVirtualNicSpec) (string, error) {
54	req := types.AddServiceConsoleVirtualNic{
55		This:      o.Reference(),
56		Portgroup: portgroup,
57		Nic:       nic,
58	}
59
60	res, err := methods.AddServiceConsoleVirtualNic(ctx, o.c, &req)
61	if err != nil {
62		return "", err
63	}
64
65	return res.Returnval, nil
66}
67
68// AddVirtualNic wraps methods.AddVirtualNic
69func (o HostNetworkSystem) AddVirtualNic(ctx context.Context, portgroup string, nic types.HostVirtualNicSpec) (string, error) {
70	req := types.AddVirtualNic{
71		This:      o.Reference(),
72		Portgroup: portgroup,
73		Nic:       nic,
74	}
75
76	res, err := methods.AddVirtualNic(ctx, o.c, &req)
77	if err != nil {
78		return "", err
79	}
80
81	return res.Returnval, nil
82}
83
84// AddVirtualSwitch wraps methods.AddVirtualSwitch
85func (o HostNetworkSystem) AddVirtualSwitch(ctx context.Context, vswitchName string, spec *types.HostVirtualSwitchSpec) error {
86	req := types.AddVirtualSwitch{
87		This:        o.Reference(),
88		VswitchName: vswitchName,
89		Spec:        spec,
90	}
91
92	_, err := methods.AddVirtualSwitch(ctx, o.c, &req)
93	if err != nil {
94		return err
95	}
96
97	return nil
98}
99
100// QueryNetworkHint wraps methods.QueryNetworkHint
101func (o HostNetworkSystem) QueryNetworkHint(ctx context.Context, device []string) error {
102	req := types.QueryNetworkHint{
103		This:   o.Reference(),
104		Device: device,
105	}
106
107	_, err := methods.QueryNetworkHint(ctx, o.c, &req)
108	if err != nil {
109		return err
110	}
111
112	return nil
113}
114
115// RefreshNetworkSystem wraps methods.RefreshNetworkSystem
116func (o HostNetworkSystem) RefreshNetworkSystem(ctx context.Context) error {
117	req := types.RefreshNetworkSystem{
118		This: o.Reference(),
119	}
120
121	_, err := methods.RefreshNetworkSystem(ctx, o.c, &req)
122	if err != nil {
123		return err
124	}
125
126	return nil
127}
128
129// RemovePortGroup wraps methods.RemovePortGroup
130func (o HostNetworkSystem) RemovePortGroup(ctx context.Context, pgName string) error {
131	req := types.RemovePortGroup{
132		This:   o.Reference(),
133		PgName: pgName,
134	}
135
136	_, err := methods.RemovePortGroup(ctx, o.c, &req)
137	if err != nil {
138		return err
139	}
140
141	return nil
142}
143
144// RemoveServiceConsoleVirtualNic wraps methods.RemoveServiceConsoleVirtualNic
145func (o HostNetworkSystem) RemoveServiceConsoleVirtualNic(ctx context.Context, device string) error {
146	req := types.RemoveServiceConsoleVirtualNic{
147		This:   o.Reference(),
148		Device: device,
149	}
150
151	_, err := methods.RemoveServiceConsoleVirtualNic(ctx, o.c, &req)
152	if err != nil {
153		return err
154	}
155
156	return nil
157}
158
159// RemoveVirtualNic wraps methods.RemoveVirtualNic
160func (o HostNetworkSystem) RemoveVirtualNic(ctx context.Context, device string) error {
161	req := types.RemoveVirtualNic{
162		This:   o.Reference(),
163		Device: device,
164	}
165
166	_, err := methods.RemoveVirtualNic(ctx, o.c, &req)
167	if err != nil {
168		return err
169	}
170
171	return nil
172}
173
174// RemoveVirtualSwitch wraps methods.RemoveVirtualSwitch
175func (o HostNetworkSystem) RemoveVirtualSwitch(ctx context.Context, vswitchName string) error {
176	req := types.RemoveVirtualSwitch{
177		This:        o.Reference(),
178		VswitchName: vswitchName,
179	}
180
181	_, err := methods.RemoveVirtualSwitch(ctx, o.c, &req)
182	if err != nil {
183		return err
184	}
185
186	return nil
187}
188
189// RestartServiceConsoleVirtualNic wraps methods.RestartServiceConsoleVirtualNic
190func (o HostNetworkSystem) RestartServiceConsoleVirtualNic(ctx context.Context, device string) error {
191	req := types.RestartServiceConsoleVirtualNic{
192		This:   o.Reference(),
193		Device: device,
194	}
195
196	_, err := methods.RestartServiceConsoleVirtualNic(ctx, o.c, &req)
197	if err != nil {
198		return err
199	}
200
201	return nil
202}
203
204// UpdateConsoleIpRouteConfig wraps methods.UpdateConsoleIpRouteConfig
205func (o HostNetworkSystem) UpdateConsoleIpRouteConfig(ctx context.Context, config types.BaseHostIpRouteConfig) error {
206	req := types.UpdateConsoleIpRouteConfig{
207		This:   o.Reference(),
208		Config: config,
209	}
210
211	_, err := methods.UpdateConsoleIpRouteConfig(ctx, o.c, &req)
212	if err != nil {
213		return err
214	}
215
216	return nil
217}
218
219// UpdateDnsConfig wraps methods.UpdateDnsConfig
220func (o HostNetworkSystem) UpdateDnsConfig(ctx context.Context, config types.BaseHostDnsConfig) error {
221	req := types.UpdateDnsConfig{
222		This:   o.Reference(),
223		Config: config,
224	}
225
226	_, err := methods.UpdateDnsConfig(ctx, o.c, &req)
227	if err != nil {
228		return err
229	}
230
231	return nil
232}
233
234// UpdateIpRouteConfig wraps methods.UpdateIpRouteConfig
235func (o HostNetworkSystem) UpdateIpRouteConfig(ctx context.Context, config types.BaseHostIpRouteConfig) error {
236	req := types.UpdateIpRouteConfig{
237		This:   o.Reference(),
238		Config: config,
239	}
240
241	_, err := methods.UpdateIpRouteConfig(ctx, o.c, &req)
242	if err != nil {
243		return err
244	}
245
246	return nil
247}
248
249// UpdateIpRouteTableConfig wraps methods.UpdateIpRouteTableConfig
250func (o HostNetworkSystem) UpdateIpRouteTableConfig(ctx context.Context, config types.HostIpRouteTableConfig) error {
251	req := types.UpdateIpRouteTableConfig{
252		This:   o.Reference(),
253		Config: config,
254	}
255
256	_, err := methods.UpdateIpRouteTableConfig(ctx, o.c, &req)
257	if err != nil {
258		return err
259	}
260
261	return nil
262}
263
264// UpdateNetworkConfig wraps methods.UpdateNetworkConfig
265func (o HostNetworkSystem) UpdateNetworkConfig(ctx context.Context, config types.HostNetworkConfig, changeMode string) (*types.HostNetworkConfigResult, error) {
266	req := types.UpdateNetworkConfig{
267		This:       o.Reference(),
268		Config:     config,
269		ChangeMode: changeMode,
270	}
271
272	res, err := methods.UpdateNetworkConfig(ctx, o.c, &req)
273	if err != nil {
274		return nil, err
275	}
276
277	return &res.Returnval, nil
278}
279
280// UpdatePhysicalNicLinkSpeed wraps methods.UpdatePhysicalNicLinkSpeed
281func (o HostNetworkSystem) UpdatePhysicalNicLinkSpeed(ctx context.Context, device string, linkSpeed *types.PhysicalNicLinkInfo) error {
282	req := types.UpdatePhysicalNicLinkSpeed{
283		This:      o.Reference(),
284		Device:    device,
285		LinkSpeed: linkSpeed,
286	}
287
288	_, err := methods.UpdatePhysicalNicLinkSpeed(ctx, o.c, &req)
289	if err != nil {
290		return err
291	}
292
293	return nil
294}
295
296// UpdatePortGroup wraps methods.UpdatePortGroup
297func (o HostNetworkSystem) UpdatePortGroup(ctx context.Context, pgName string, portgrp types.HostPortGroupSpec) error {
298	req := types.UpdatePortGroup{
299		This:    o.Reference(),
300		PgName:  pgName,
301		Portgrp: portgrp,
302	}
303
304	_, err := methods.UpdatePortGroup(ctx, o.c, &req)
305	if err != nil {
306		return err
307	}
308
309	return nil
310}
311
312// UpdateServiceConsoleVirtualNic wraps methods.UpdateServiceConsoleVirtualNic
313func (o HostNetworkSystem) UpdateServiceConsoleVirtualNic(ctx context.Context, device string, nic types.HostVirtualNicSpec) error {
314	req := types.UpdateServiceConsoleVirtualNic{
315		This:   o.Reference(),
316		Device: device,
317		Nic:    nic,
318	}
319
320	_, err := methods.UpdateServiceConsoleVirtualNic(ctx, o.c, &req)
321	if err != nil {
322		return err
323	}
324
325	return nil
326}
327
328// UpdateVirtualNic wraps methods.UpdateVirtualNic
329func (o HostNetworkSystem) UpdateVirtualNic(ctx context.Context, device string, nic types.HostVirtualNicSpec) error {
330	req := types.UpdateVirtualNic{
331		This:   o.Reference(),
332		Device: device,
333		Nic:    nic,
334	}
335
336	_, err := methods.UpdateVirtualNic(ctx, o.c, &req)
337	if err != nil {
338		return err
339	}
340
341	return nil
342}
343
344// UpdateVirtualSwitch wraps methods.UpdateVirtualSwitch
345func (o HostNetworkSystem) UpdateVirtualSwitch(ctx context.Context, vswitchName string, spec types.HostVirtualSwitchSpec) error {
346	req := types.UpdateVirtualSwitch{
347		This:        o.Reference(),
348		VswitchName: vswitchName,
349		Spec:        spec,
350	}
351
352	_, err := methods.UpdateVirtualSwitch(ctx, o.c, &req)
353	if err != nil {
354		return err
355	}
356
357	return nil
358}
359