Skip to content

Commit

Permalink
[Mellanox] Use MAC from EEPROM for PortChannels and VLAN Interfaces (#…
Browse files Browse the repository at this point in the history
…1793)

* Use MAC from EEPROM for PortChannels

Signed-off-by: Andriy Moroz <[email protected]>

* Use MAC from EEPROM in DEVICE_METADATA

Will affect MAC for VLAN interfaces

Signed-off-by: Andriy Moroz <[email protected]>

* Get MAC via decode-syseeprom

Signed-off-by: Andriy Moroz <[email protected]>

* hw-management is now a service

Signed-off-by: Andriy Moroz <[email protected]>

* Add error handling for MAC fetch process

Signed-off-by: Andriy Moroz <[email protected]>
  • Loading branch information
andriymoroz-mlnx authored and lguohan committed Jul 23, 2018
1 parent 927c41f commit dadc17d
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 4 deletions.
7 changes: 6 additions & 1 deletion dockers/docker-teamd/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ rm -rf $TEAMD_CONF_PATH
mkdir -p $TEAMD_CONF_PATH

SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type)
MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}')

if [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then
MAC_ADDRESS=$(sonic-cfggen -d -v DEVICE_METADATA.localhost.mac)
else
MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}')
fi

# Align last byte
if [ "$SONIC_ASIC_TYPE" == "mellanox" -o "$SONIC_ASIC_TYPE" == "centec" ]; then
Expand Down
2 changes: 1 addition & 1 deletion files/build_templates/sonic_debian_extension.j2
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable hostname-config.service
sudo cp $IMAGE_CONFIGS/hostname/hostname-config.sh $FILESYSTEM_ROOT/usr/bin/

# Copy updategraph script and service file
sudo cp $IMAGE_CONFIGS/updategraph/updategraph.service $FILESYSTEM_ROOT/etc/systemd/system/
j2 files/build_templates/updategraph.service.j2 | sudo tee $FILESYSTEM_ROOT/etc/systemd/system/updategraph.service
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable updategraph.service
sudo cp $IMAGE_CONFIGS/updategraph/updategraph $FILESYSTEM_ROOT/usr/bin/
{% if enable_dhcp_graph_service == "y" %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ Description=Update minigraph and set configuration based on minigraph
After=rc-local.service
After=database.service
Requires=database.service
{% if sonic_asic_platform == 'mellanox' -%}
Requires=hw-management.service
{% endif -%}


[Service]
Type=oneshot
Expand Down
1 change: 1 addition & 0 deletions platform/mellanox/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ mlnx-sai/*
!mlnx-sai/Makefile
hw-management/*
!hw-management/Makefile
!hw-management/*.patch
mft/*
!mft/Makefile

Expand Down
58 changes: 58 additions & 0 deletions platform/mellanox/hw-management/Add-systemd-service-config.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
From 22fef644b1150677353ab0559828ea45a982d901 Mon Sep 17 00:00:00 2001
From: Andriy Moroz <[email protected]>
Date: Wed, 11 Jul 2018 16:51:07 +0300
Subject: [PATCH] Add systemd service config

Signed-off-by: Andriy Moroz <[email protected]>
---
debian/control | 2 +-
debian/hw-management.service | 10 ++++++++++
debian/rules | 2 +-
3 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 debian/hw-management.service

diff --git a/debian/control b/debian/control
index 048cd61..7e3a545 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,7 @@
Source: hw-management
Priority: extra
Maintainer: Adir Atias <adira@dev-r-vrt-128-008>
-Build-Depends:
+Build-Depends: dh-systemd
Standards-Version:
Section: libs
Homepage: http://www.mellanox.com
diff --git a/debian/hw-management.service b/debian/hw-management.service
new file mode 100644
index 0000000..d18916d
--- /dev/null
+++ b/debian/hw-management.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Mellanox Hardware Management
+
+[Service]
+Type=oneshot
+EnvironmentFile=/host/machine.conf
+ExecStart=/bin/bash -c "/usr/share/sonic/device/$onie_platform/hw-management start"
+
+[Install]
+WantedBy=multi-user.target
diff --git a/debian/rules b/debian/rules
index fc38817..fba4150 100755
--- a/debian/rules
+++ b/debian/rules
@@ -8,7 +8,7 @@ K_SRC ?= "/lib/modules/$(KVERSION)/build"
pwd=$(shell pwd)

%:
- dh $@
+ dh $@ --with systemd

override_dh_auto_configure:

--
1.9.1

1 change: 1 addition & 0 deletions platform/mellanox/hw-management/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :

# build
pushd hw-management
git am ../*.patch
sed "s~@SED_VERSION@~$(MLNX_HW_MANAGEMENT_VERSION)~" -i debian/changelog
chmod +x ./debian/rules
sudo ./debian/rules binary KVERSION=$(KVERSION)
Expand Down
2 changes: 2 additions & 0 deletions slave.mk
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
j2 -f env files/initramfs-tools/union-mount.j2 onie-image.conf > files/initramfs-tools/union-mount
j2 -f env files/initramfs-tools/arista-convertfs.j2 onie-image.conf > files/initramfs-tools/arista-convertfs

j2 files/build_templates/updategraph.service.j2 > updategraph.service

$(if $($*_DOCKERS),
j2 files/build_templates/sonic_debian_extension.j2 > sonic_debian_extension.sh
chmod +x sonic_debian_extension.sh,
Expand Down
13 changes: 11 additions & 2 deletions src/sonic-config-engine/sonic_platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,21 @@ def get_sonic_version_info():
return data

def get_system_mac():
proc = subprocess.Popen("ip link show eth0 | grep ether | awk '{print $2}'", shell=True, stdout=subprocess.PIPE)
version_info = get_sonic_version_info()

if (version_info['asic_type'] == 'mellanox'):
get_mac_cmd = "sudo decode-syseeprom -m"
else:
get_mac_cmd = "ip link show eth0 | grep ether | awk '{print $2}'"

proc = subprocess.Popen(get_mac_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(mac, err) = proc.communicate()
if err:
return None

mac = mac.strip()

# Align last byte of MAC if necessary
version_info = get_sonic_version_info()
if version_info and (version_info['asic_type'] == 'mellanox' or version_info['asic_type'] == 'centec'):
last_byte = mac[-2:]
aligned_last_byte = format(int(int(last_byte, 16) & 0b11000000), '02x')
Expand Down

0 comments on commit dadc17d

Please sign in to comment.