आप यह सुनिश्चित करते हैं कि भौतिक नेटवर्क इंटरफेस हमेशा एक एम्बेडेड लिनक्स सिस्टम पर रिबूट के समान इंटरफ़ेस नाम प्राप्त करें?


13

एक एम्बेडेड लिनक्स सिस्टम के लिए, यदि मेरे पास दो या अधिक नेटवर्क इंटरफेस हैं, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि उन्हें हमेशा हर बूट के समान इंटरफ़ेस नाम मिलें

दूसरे शब्दों में, मैं चाहता हूं, उदाहरण के लिए, eth0 हमेशा एक भौतिक ईथरनेट पोर्ट के लिए मैप करने के लिए, अगले करने के लिए eth1, आदि।

मेरा लिनक्स "वितरण" घर-घर है, और मैं आबादी / देव के लिए devtmpfs का उपयोग करता हूं। मैं सिस्टम स्टार्टअप और शटडाउन के लिए कस्टम इनिट स्क्रिप्ट के साथ init (और सबसे अधिक सब कुछ) के लिए व्यस्त बॉक्स का उपयोग करता हूं।

मुझे महादेव या udv की हॉटप्लग सुविधाओं की आवश्यकता नहीं है - मैं ईथरनेट पोर्ट्स "फिक्स्ड" की बात कर रहा हूं।


मैंने मान लिया कि डेविट्री फ़ाइल में इसे निर्दिष्ट करने का कोई तरीका होगा, लेकिन मुझे यह पता नहीं चल पाया है कि कैसे।

जवाबों:


7

यह मेरे लिए x86_64 आर्किटेक्चर पर लिनक्स 3.9.0 के साथ काम करता है।

#!/bin/sh

# This assumes the interfaces come up with default names of eth*.
# The interface names may not be correct at this point, however.
# This is just a way to get the PCI addresses of all the active
# interfaces.
PCIADDRLIST=
for dir in /sys/class/net/eth* ; do
  [ -e $dir/device ] && {
    PCIADDRLIST="`readlink -f $dir/device` ${PCIADDRLIST}"
  }
done

# Now assign the interface names from an ordered list that maps
# to the PCI addresses of each interface.

# IFNAMES could come from some config file.  "dummy" is needed because of
# my limited tr- and awk-fu.
IFNAMES="eth0 eth1 eth2 dummy"

for dir in `echo ${PCIADDRLIST} | tr " " "\n" | sort` ; do
  [ -e $dir/net/*/address ] && {
    MACADDR=`cat $dir/net/*/address`
    IFNAME=`echo $IFNAMES | awk '{print $1}'`
    IFNAMES=`echo $IFNAMES | awk '{ for (i=2; i<=NF; i++) printf "%s ", $i; }'`
    echo -n "$IFNAME "
    nameif $IFNAME mac=$MACADDR
  }
done

2
से man nameif: "यह कार्यक्रम अप्रचलित है। प्रतिस्थापन जांच के लिए ip link।" भी ध्यान रखें कि यदि प्रणाली पर हैं करता है उपयोग udev, अपनी रणनीति का खतरा विफलता के रूप में हो जाएगा /sys/class/net/eth[whatever]मौजूद नहीं हो सकता है।

2

आपने उल्लेख किया है कि आपको udev की आवश्यकता नहीं है लेकिन यदि आप इसे स्थापित करने के विरोध में नहीं हैं तो आप biosdevname का उपयोग करने पर विचार कर सकते हैं । Freedesktop.org पर एक शानदार विकी पेज है जो इस मुद्दे पर चर्चा करता है। जैसा कि उस पृष्ठ पर नोट किया गया है, यदि आप udev संस्करण 197 या उच्चतर का उपयोग कर रहे हैं, तो आपको biosdevname की भी आवश्यकता नहीं है क्योंकि udev पहले से ही वही करेगा जो आपको चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.