README.md
1# Network Management
2
3## Overview
4
5A Network Manager is a daemon which handles network management operations. It
6must implement the `xyz.openbmc_project.Network.SystemConfiguration.interface`
7and `org.freedesktop.DBus.ObjectManager`.
8
9When the network manager daemon comes up, it should create objects implementing
10physical link/virtual interfaces such as
11`xyz.openbmc_project.Network.EthernetInterface` or
12`xyz.openbmc_project.Network.VLANInterface` on the system.
13
14IP address(v4 and v6) objects must be children objects of the physical/virtual
15interface object.
16
17## Interfaces
18
191. SystemConfiguration: This describes the system-specific parameters.
202. EthernetInterface: This describes the interface specific parameters.
213. IP: This describes the IP address specific parameters.
224. IPProtocol: This describes the IP protocol type(IPv4/IPv6).
235. VLANInterface: This describes the VLAN specific properties.
246. Bond: This describes the interface bonding parameters.
25
26## D-Bus Objects
27
28### Interface Objects
29
30Interface objects can be physical as well as virtual.
31
32If the object is a physical interface, it can't be deleted, but if it is a
33virtual interface object it can be deleted.
34
35E.g. `/xyz/openbmc_project/network/<interfacename>`
36
37### IP Address Objects
38
39There can be multiple IP address objects under an interface object. These
40objects can be deleted by the delete function.
41
42IPv4 objects will have the following D-Bus object path:
43
44`/xyz/openbmc_project/network/<interface>/ipv4/<id>`
45
46IPv6 objects will have the following D-Bus object path:
47
48`/xyz/openbmc_project/network/<interface>/ipv6/<id>`
49
50### Network Configuration Object
51
52The network configuration object will have system configuration parameters:
53
54`/xyz/openbmc_project/network/conf`
55
56## Commands
57
58### Create Static IPv4 Address
59
60```sh
61busctl call xyz.openbmc_project.Network \
62 /xyz/openbmc_project/network/<interface> \
63 xyz.openbmc_project.Network.IP.Create \
64 IP ssys "xyz.openbmc_project.Network.IP.Protocol.IPv4" \
65 "<IP Address>" <Netmask Prefix> "<Network Gateway>"
66```
67
68```sh
69curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST \
70 -d '{
71 "data": [
72 "xyz.openbmc_project.Network.IP.Protocol.IPv4",
73 "<IP Address",
74 <Netmask Prefix>,
75 "<Network Gateway>"
76 ]
77 }' \
78 https://${bmc}/xyz/openbmc_project/network/<interface>/action/IP
79```
80
81E.g.
82
83```sh
84curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST \
85 -d '{
86 "data": [
87 "xyz.openbmc_project.Network.IP.Protocol.IPv4",
88 "8.8.8.8",
89 24,
90 "8.8.8.0"
91 ]
92 }' \
93 https://${bmc}/xyz/openbmc_project/network/eth0/action/IP
94```
95
96Note: After creating the IP address object enumerate the network interface
97object to get the IPv4 id.
98
99### Delete IPv4 Address
100
101```sh
102busctl call xyz.openbmc_project.Network \
103 /xyz/openbmc_project/network/<interface>/ipv4/<id> \
104 xyz.openbmc_project.Object.Delete Delete
105```
106
107```sh
108curl -c cjar -b cjar -k -H "Content-Type: application/json" -X DELETE \
109 https://${bmc}/xyz/openbmc_project/network/<interface>/ipv4/<id>
110```
111
112### Default Gateway
113
114#### Get
115
116```sh
117busctl get-property xyz.openbmc_project.Network \
118 /xyz/openbmc_project/network/config \
119 xyz.openbmc_project.Network.SystemConfiguration DefaultGateway
120```
121
122```sh
123curl -c cjar -b cjar -k -H "Content-Type: application/json" \
124 https://${bmc}/xyz/openbmc_project/network/config/attr/DefaultGateway
125```
126
127#### Set
128
129```sh
130busctl set-property xyz.openbmc_project.Network \
131 /xyz/openbmc_project/network/config \
132 xyz.openbmc_project.Network.SystemConfiguration \
133 DefaultGateway s "<DefaultGateway>"
134```
135
136```sh
137curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT \
138 -d '{"data": "<DefaultGateway>"}' \
139 https://${bmc}/xyz/openbmc_project/network/config/attr/DefaultGateway
140```
141
142NOTE: The default gateway must be pingable, if not 0.0.0.0 will be used.
143
144### HostName
145
146#### Get
147
148```sh
149busctl get-property xyz.openbmc_project.Network \
150 /xyz/openbmc_project/network/config \
151 xyz.openbmc_project.Network.SystemConfiguration HostName
152```
153
154```sh
155curl -c cjar -b cjar -k -H "Content-Type: application/json" \
156 https://${bmc}/xyz/openbmc_project/network/config/attr/HostName
157```
158
159#### Set
160
161```sh
162busctl set-property xyz.openbmc_project.Network \
163 /xyz/openbmc_project/network/config \
164 xyz.openbmc_project.Network.SystemConfiguration HostName s "<HostName>"
165```
166
167```sh
168curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT \
169 -d '{"data": "<HostName>"}' \
170 https://${bmc}/xyz/openbmc_project/network/config/attr/HostName
171```
172
173### DHCP
174
175#### Get
176
177```sh
178busctl get-property xyz.openbmc_project.Network \
179 /xyz/openbmc_project/network/eth0 \
180 xyz.openbmc_project.Network.EthernetInterface DHCPEnabled
181```
182
183```sh
184curl -c cjar -b cjar -k -H "Content-Type: application/json" \
185 https://${bmc}/xyz/openbmc_project/network/eth0/attr/DHCPEnabled
186```
187
188#### Enable
189
190```sh
191busctl set-property xyz.openbmc_project.Network \
192 /xyz/openbmc_project/network/eth0 \
193 xyz.openbmc_project.Network.EthernetInterface DHCPEnabled b 1
194```
195
196```sh
197curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT \
198 -d '{"data": 1}' \
199 https://${bmc}/xyz/openbmc_project/network/eth0/attr/DHCPEnabled
200```
201
202### MAC Address
203
204#### Get
205
206```sh
207busctl get-property xyz.openbmc_project.Network \
208 /xyz/openbmc_project/network/eth0 \
209 xyz.openbmc_project.Network.MACAddress MACAddress
210```
211
212```sh
213curl -c cjar -b cjar -k -H "Content-Type: application/json" \
214 https://${bmc}/xyz/openbmc_project/network/<interface>/attr/MACAddress
215```
216
217#### Set
218
219```sh
220busctl set-property xyz.openbmc_project.Network \
221 /xyz/openbmc_project/network/<interface> \
222 xyz.openbmc_project.Network.MACAddress MACAddress s "<MAC Address>"
223```
224
225```sh
226curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT \
227 -d '{"data": "<MAC Address>" }' \
228 https://${bmc}/xyz/openbmc_project/network/<interface>/attr/MACAddress
229```
230
231NOTE: MAC address should be a local admin MAC (2nd bit of first byte should be
232on).
233
234### Network Factory Reset
235
236```sh
237busctl call xyz.openbmc_project.Network /xyz/openbmc_project/network \
238 xyz.openbmc_project.Common.FactoryReset Reset
239```
240
241```sh
242curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST \
243 -d '{"data":[] }' https://${bmc}/xyz/openbmc_project/network/action/Reset
244```
245
246### VLAN
247
248#### Create
249
250```sh
251busctl call xyz.openbmc_project.Network /xyz/openbmc_project/network \
252 xyz.openbmc_project.Network.VLAN.Create VLAN su "<interface>" <VLAN id>
253```
254
255```sh
256curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST \
257 -d '{"data":["<interface>", <VLAN id>] }' \
258 https://${bmc}/xyz/openbmc_project/network/action/VLAN
259```
260
261E.g.
262
263```sh
264curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST \
265 -d '{"data":["eth0",50] }' \
266 https://${bmc}/xyz/openbmc_project/network/action/VLAN
267```
268
269#### Delete
270
271```sh
272busctl call xyz.openbmc_project.Network \
273 /xyz/openbmc_project/network/<VLAN interface> \
274 xyz.openbmc_project.Object.Delete Delete
275```
276
277```sh
278curl -c cjar -b cjar -k -H "Content-Type: application/json" -X DELETE \
279 https://${bmc}/xyz/openbmc_project/network/<VLAN interface>
280```
281
282E.g.
283
284```sh
285curl -c cjar -b cjar -k -H "Content-Type: application/json" -X DELETE \
286 https://${bmc}/xyz/openbmc_project/network/eth0_50
287```
288
289#### Enumerate
290
291```sh
292curl -c cjar -b cjar -k -H "Content-Type: application/json" \
293 https://${bmc}/xyz/openbmc_project/network/<VLAN interface>/enumerate
294```
295
296### IPMI VLAN and IP
297
298#### Create
299
300```sh
301ipmitool -I dbus lan set 1 ipsrc static
302
303ipmitool -I dbus lan set 1 ipaddr <IP address>
304
305ipmitool -I dbus lan set 1 netmask <mask>
306
307ipmitool -I dbus lan set 1 defgw ipaddr <IP address>
308
309ipmitool -I dbus lan set 1 vlan id <id>
310
311ipmitool -I dbus raw 0x06 0x40 // To the save settings
312```
313
314NOTE: It takes 4-5 seconds to create the VLAN and configure the IP. If a VLAN
315interface is not desired don't set the VLAN id above.
316
317#### Delete
318
319```sh
320ipmitool -I dbus lan set 1 vlan id off
321
322ipmitool -I dbus raw 0x06 0x40 // To the save settings
323```
324