[Mellanox] Use MAC from EEPROM for PortChannels and VLAN Interfaces#1793
[Mellanox] Use MAC from EEPROM for PortChannels and VLAN Interfaces#1793lguohan merged 5 commits intosonic-net:masterfrom
Conversation
Signed-off-by: Andriy Moroz <[email protected]>
930e3ee to
e4b16e2
Compare
|
need to do some tests to implement the same for VLAN interfaces... |
| if [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then | ||
| MAC_ADDRESS=$(od -vt x1 -An /sys/bus/i2c/devices/8-0051/eeprom | xargs printf "0x%s " | xargs printf "%02x:" | awk 'BEGIN { FS=":"; i=8+1+2+1} {while(i<NF) {type=$i; len=("0x"$(i+1));if(type!="24") {i=i+2+len} else {print substr($0, (i+1)*3+1, len*3-1); break}}}') | ||
| else | ||
| MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') |
There was a problem hiding this comment.
cat /sys/class/net/eth0/address
lguohan
left a comment
There was a problem hiding this comment.
use decode-syseeprom -m
dockers/docker-teamd/start.sh
Outdated
| MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | ||
|
|
||
| if [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then | ||
| MAC_ADDRESS=$(od -vt x1 -An /sys/bus/i2c/devices/8-0051/eeprom | xargs printf "0x%s " | xargs printf "%02x:" | awk 'BEGIN { FS=":"; i=8+1+2+1} {while(i<NF) {type=$i; len=("0x"$(i+1));if(type!="24") {i=i+2+len} else {print substr($0, (i+1)*3+1, len*3-1); break}}}') |
There was a problem hiding this comment.
sudo decode-syseeprom -m to figure out the base mac?
There was a problem hiding this comment.
it is not available inside docker container, checking why...
UPD:
they have their own /usr/bin
we share only:
-v /etc/sonic:/etc/sonic:ro
-v /var/run/redis:/var/run/redis:rw
-v /usr/share/sonic/device/$PLATFORM:/usr/share/sonic/platform:ro
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
Will affect MAC for VLAN interfaces Signed-off-by: Andriy Moroz <[email protected]>
|
|
||
| if (version_info['asic_type'] == 'mellanox'): | ||
| eeprom_file = "/sys/bus/i2c/devices/8-0051/eeprom" | ||
| if (os.access(eeprom_file, os.R_OK)): |
There was a problem hiding this comment.
if (os.access(eeprom_file, os.R_OK)): [](start = 8, length = 37)
else, it is an error. #Closed
Signed-off-by: Andriy Moroz <[email protected]>
| get_mac_cmd = "ip link show eth0 | grep ether | awk '{print $2}'" | ||
|
|
||
| proc = subprocess.Popen(get_mac_cmd, shell=True, stdout=subprocess.PIPE) | ||
| (mac, err) = proc.communicate() |
There was a problem hiding this comment.
err [](start = 10, length = 3)
Handle error before using mac. #Closed
| Type=oneshot | ||
| {% if sonic_asic_platform == 'mellanox' -%} | ||
| EnvironmentFile=/host/machine.conf | ||
| ExecStartPre=/bin/bash -c "/usr/share/sonic/device/$onie_platform/hw-management start" |
There was a problem hiding this comment.
hw-management [](start = 66, length = 13)
Is updategraph a good location for hw-management? It seems has nothing todo with graph. @taoyl-ms #Closed
There was a problem hiding this comment.
Agree with Qi. I don't see the reason to put hw-management here, and I don't see the need to change this into a j2 file either. Platform information can also be tested during runtime.
There was a problem hiding this comment.
we need drivers to access eeprom
j2 to avoid this code for others
There was a problem hiding this comment.
Why not create another service for this?
And, you can create a shell script to enable hw-management in which you can test platform information run time. It is much easier to follow than a build-time j2 rendering.
There was a problem hiding this comment.
in current case, when will hw-management be started? Maybe hw-management itself should be a service and make it start early.
Signed-off-by: Andriy Moroz <[email protected]>
| 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}') |
There was a problem hiding this comment.
MAC_ADDRESS=$(</sys/class/net/eth0/address)
There was a problem hiding this comment.
the case under "else" getting MAC address from the "ip link show eth0" is the old code and used for other platforms
I can change it to what you suggested, but I am not able to test it on non-Mellanox boxes...
|
|
||
| # 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 |
There was a problem hiding this comment.
why do we need to copy everything to the screen?
There was a problem hiding this comment.
to get it in build log, I think
seen it in some other place
suggest to remove tee?
| 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}'" |
There was a problem hiding this comment.
read a file "/sys/class/net/eth0/address"?
There was a problem hiding this comment.
like above - not sure about other platforms
| 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) |
There was a problem hiding this comment.
can we do sudo decode-syseeprom -m here?
There was a problem hiding this comment.
unfortunately no, it is not available in the containers...
Signed-off-by: Andriy Moroz <[email protected]>
pavel-shirshov
left a comment
There was a problem hiding this comment.
Discussed offline. Let's keep the original PR.
This is a suggestion. Since the code is owned by Mellanox, why not commit the patch there? Refers to: platform/mellanox/hw-management/Makefile:9 in 048db4d. [](commit_id = 048db4d, deletion_comment = False) |
qiluo-msft
left a comment
There was a problem hiding this comment.
Unblock, with suggestion.
…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]>
| 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 |
There was a problem hiding this comment.
Is this line necessary? The same operation is being done in sonic_debian_extension.j2 above and there the resulting file is getting copied to its proper final destination. Why is this file getting written to the repo root? It doesn't appear to be used anywhere.
…t time (sonic-net#1749)" (sonic-net#1793) This reverts commit e56c492.
…tomatically (sonic-net#1793) #### Why I did it src/sonic-gnmi ``` * 1f064f3 - (HEAD -> 202412, origin/202412) Cherry-pick sonic-gnmi PR sonic-net#533 (sonic-net#143) (21 hours ago) [Changrong Wu] ``` #### How I did it #### How to verify it #### Description for the changelog
…tically (#26290) #### Why I did it src/sonic-sairedis ``` * 9a87a71c - (HEAD -> master, origin/master, origin/HEAD) create default hash profile for ecmp and lag (#1793) (6 hours ago) [yue-fred-gao] * 7d78093e - Support ARP passthrough (#1792) (8 hours ago) [yue-fred-gao] * 5772733c - vpp: enable bulk operations (#1794) (13 hours ago) [yue-fred-gao] * 755b853c - [nokia-c1] Add a new virtual switch type (#1779) (21 hours ago) [henry huang] ``` #### How I did it #### How to verify it #### Description for the changelog
…tically (sonic-net#26290) #### Why I did it src/sonic-sairedis ``` * 9a87a71c - (HEAD -> master, origin/master, origin/HEAD) create default hash profile for ecmp and lag (sonic-net#1793) (6 hours ago) [yue-fred-gao] * 7d78093e - Support ARP passthrough (sonic-net#1792) (8 hours ago) [yue-fred-gao] * 5772733c - vpp: enable bulk operations (sonic-net#1794) (13 hours ago) [yue-fred-gao] * 755b853c - [nokia-c1] Add a new virtual switch type (sonic-net#1779) (21 hours ago) [henry huang] ``` #### How I did it #### How to verify it #### Description for the changelog Signed-off-by: arlakshm <[email protected]>
Signed-off-by: Andriy Moroz [email protected]
- What I did
Updated teams start script to pass MAC from EEPROM to the portchannels config template
- How I did it
updated start.sh which runs in teamd container
- How to verify it
Start SONiC and make sure MACs on PortChannel (and members) or Vlan interface are similar to one returned by command
od -vt x1 -An /sys/bus/i2c/devices/8-0051/eeprom | xargs printf "0x%s " | xargs printf "%02x:" | awk 'BEGIN { FS=":"; i=8+1+2+1} {while(i<NF) {type=$i; len=("0x"$(i+1));if(type!="24") {i=i+2+len} else {print substr($0, (i+1)3+1, len3-1); break}}}'
some bits in last byte may differ