blob: 2c2f48e198cc658296bf551d19c27023a07be14f [file] [log] [blame]
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +05301#pragma once
2
Ratan Gupta5978dd12017-07-25 13:47:13 +05303#include "ethernet_interface.hpp"
Patrick Venture189d44e2018-07-09 12:30:59 -07004#include "types.hpp"
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +05305#include "xyz/openbmc_project/Network/VLAN/server.hpp"
6
7#include <sdbusplus/bus.hpp>
8#include <sdbusplus/server/object.hpp>
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +05309#include <string>
Patrick Venture189d44e2018-07-09 12:30:59 -070010#include <xyz/openbmc_project/Object/Delete/server.hpp>
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053011
12namespace phosphor
13{
14namespace network
15{
16
17class EthernetInterface;
18class Manager;
19
Ratan Guptabc886292017-07-25 18:29:57 +053020using DeleteIface = sdbusplus::xyz::openbmc_project::Object::server::Delete;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053021using VlanIface = sdbusplus::xyz::openbmc_project::Network::server::VLAN;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053022
23/** @class VlanInterface
24 * @brief OpenBMC vlan Interface implementation.
25 * @details A concrete implementation for the vlan interface
26 */
Ratan Gupta26e87a02017-08-18 01:08:40 +053027class VlanInterface : public VlanIface,
28 public DeleteIface,
29 public EthernetInterface
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053030{
Gunnar Mills57d9c502018-09-14 14:42:34 -050031 public:
32 VlanInterface() = delete;
33 VlanInterface(const VlanInterface&) = delete;
34 VlanInterface& operator=(const VlanInterface&) = delete;
35 VlanInterface(VlanInterface&&) = delete;
36 VlanInterface& operator=(VlanInterface&&) = delete;
37 virtual ~VlanInterface() = default;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053038
Gunnar Mills57d9c502018-09-14 14:42:34 -050039 /** @brief Constructor to put object onto bus at a dbus path.
40 * @param[in] bus - Bus to attach to.
41 * @param[in] objPath - Path to attach at.
42 * @param[in] dhcpEnabled - DHCP enable value.
43 * @param[in] vlanID - vlan identifier.
44 * @param[in] intf - ethernet interface object.
45 * @param[in] manager - network manager object.
Manojkiran Edaca8b91b2020-05-28 09:28:42 +053046 *
47 * This constructor is called during creation of VLAN Interface
48 * so that the VLAN interface can inherit the nICEnabled property
49 * from the parent interface.
50 */
51 VlanInterface(sdbusplus::bus::bus& bus, const std::string& objPath,
52 bool dhcpEnabled, bool nICEnabled, uint32_t vlanID,
53 EthernetInterface& intf, Manager& manager);
54
55 /** @brief Constructor to put object onto bus at a dbus path.
56 * @param[in] bus - Bus to attach to.
57 * @param[in] objPath - Path to attach at.
58 * @param[in] dhcpEnabled - DHCP enable value.
59 * @param[in] vlanID - vlan identifier.
60 * @param[in] intf - ethernet interface object.
61 * @param[in] manager - network manager object.
62 *
63 * This constructor is called during loading the VLAN Interface
Gunnar Mills57d9c502018-09-14 14:42:34 -050064 */
65 VlanInterface(sdbusplus::bus::bus& bus, const std::string& objPath,
66 bool dhcpEnabled, uint32_t vlanID, EthernetInterface& intf,
Manojkiran Edaca8b91b2020-05-28 09:28:42 +053067 Manager& parent);
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053068
Gunnar Mills57d9c502018-09-14 14:42:34 -050069 /** @brief Delete this d-bus object.
70 */
71 void delete_() override;
Ratan Guptabc886292017-07-25 18:29:57 +053072
William A. Kennington IIIa2145bf2019-04-19 13:15:56 -070073 /** @brief sets the MAC address.
74 * @param[in] value - MAC address which needs to be set on the system.
75 * @returns macAddress of the interface or throws an error.
76 */
77 std::string mACAddress(std::string value) override;
78
Gunnar Mills57d9c502018-09-14 14:42:34 -050079 /** @brief writes the device configuration.
80 systemd reads this configuration file
81 and creates the vlan interface.*/
82 void writeDeviceFile();
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053083
Gunnar Mills57d9c502018-09-14 14:42:34 -050084 private:
85 /** @brief VLAN Identifier. */
86 using VlanIface::id;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053087
Gunnar Mills57d9c502018-09-14 14:42:34 -050088 EthernetInterface& parentInterface;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053089
Gunnar Mills57d9c502018-09-14 14:42:34 -050090 friend class TestVlanInterface;
Ratan Gupta3d3e4fc2017-07-25 13:38:19 +053091};
92
93} // namespace network
94} // namespace phosphor