ইথারনেট ইন্টারফেসের পিসিআই ঠিকানা কীভাবে সন্ধান করবেন?


11

কোনও ইথারনেট ইন্টারফেসের পিসিআই বাস নম্বর বা তার বিপরীতে খুঁজে বের করার কোনও উপায় আছে। আমি একটি বাশ / পাইথন স্ক্রিপ্ট লিখতে চাই যা এর মতো কিছু দেয়

pci_address = some_function(eth0)

যেখানে pci_address হয় sys:bus:slot:function। এই দুটি উপাদান একে অপরের সাথে সম্পর্কিত হতে পারে?


চেষ্টা করেছেন lspciনাকি lshw?
সের্গেই কলডিয়াজনি 21

আমি ব্যবহার lspciকরেছি কিন্তু চেষ্টা করিনি lshw। নিম্নলিখিত আদেশটি আমার পক্ষে কাজ করেছিল lshw -class network -businfo। ধন্যবাদ @ সার্গ
ওয়াকাস

আমি সাহায্য করতে পেরে আনন্দিত. আমি এটি একটি উত্তর হিসাবে পোস্ট করব, তারপরে
সের্গেই কলডিয়াজনি

উত্তর:


15

lshwএবং lspciউভয়ই তথ্য প্রদর্শন করতে সক্ষম। আপনি ইতিমধ্যে খুঁজে পেয়েছেন হিসাবে, আপনি এটি করতে পারেন lshw -class network -businfo। উদাহরণস্বরূপ, এখানে আমার আউটপুট:

$ sudo lshw -c network -businfo                                                                                                                    
Bus info          Device      Class       Description
=====================================================
pci@0000:0e:00.0  wlan0       network     RTL8187SE Wireless LAN Controller
pci@0000:14:00.0  eth0        network     RTL8101E/RTL8102E PCI Express Fast Ethernet controller

আপনি যা ব্যবহার করতে পারেন তা হ'ল lspci -Dএবং grepবিশেষত ইথারনেট নিয়ামকটি ফিল্টার করার জন্য এটি পাইপ করুন । এখানে আমার উদাহরণ:

$ lspci -D | grep 'Network\|Ethernet'                                                                                                              
    0000:0e:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8187SE Wireless LAN Controller (rev 22)
    0000:14:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)

নোট করুন যে সিস্টেমেডে রূপান্তরিত হওয়ার সাথে সাথে , কেউ পিসিআই তথ্য সন্ধানের জন্য ইন্টারফেসের নামটি দেখতে কেবল প্রিডিকটেটেবল ইন্টারফেস নামকরণ ব্যবহার করতে পারে ।


lspciতাই 2 অভিন্ন ডিভাইসের ক্ষেত্রে আলাদা করা সম্ভব নয় ডিভাইসের নাম উপলব্ধ করা হয় না যা PCI ঠিকানা এবং ডিভাইসের নাম ম্যাচ
SomeWittyUsername

8

ইথিওল আপনাকে একটি ইন্টারফেসের জন্য পিসিও প্রদর্শন করবে (বাস-তথ্য :)

me@ubuntu:~$ ethtool -i eth0
driver: i40e
version: 1.5.16
firmware-version: 5.04 0x800024cd 0.0.0
bus-info: 0000:06:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes

8

এই তথ্যটি সিএসএফ-তে উপলব্ধ, lshw/ lspci/ ethtool/ udevadmএর মতো কোনও সহায়কের প্রয়োজন নেই:

$ grep PCI_SLOT_NAME /sys/class/net/*/device/uevent
/sys/class/net/enp4s0/device/uevent:PCI_SLOT_NAME=0000:04:00.0
/sys/class/net/wlp2s0/device/uevent:PCI_SLOT_NAME=0000:02:00.0


1
হতে পারে কারণ ভিএমওয়্যারের প্যারা ভার্চুয়ালাইজড নেটওয়ার্ক ডিভাইস ইথারনেটের উপর ভিত্তি করে নেই?
ভ্লাদিমির পানতেলিভ

ধন্যবাদ। আপনি বেশিরভাগই ঠিক বলেছেন আমি শীঘ্রই আবিষ্কার করেছি তবে এটি মুছে ফেলতে আমার মন্তব্য খুঁজে পেল না। যা ঘটেছে তা ডিপিডি কে-এর জন্য ডিভাইসটি আবার igb_uio- তে আবদ্ধ ছিল এবং তাই মূল ডিভাইস নোডগুলি আর উপলব্ধ ছিল না।
স্যাম লিডিকোট

3

দেখে মনে হচ্ছে আপনি তাদের একসাথে আইআরকিউ দ্বারা বেঁধে রাখতে পারেন।

ifconfig -a 

ইন্টেরন্ট সহ ইথারনেট ডিভাইসগুলি মুদ্রণ করবে।

যেমন।

eth2      Link encap:Ethernet  HWaddr 00:25:11:19:8b:77  
          inet addr:192.168.1.3  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:11ff:fe19:8b77/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39958 errors:0 dropped:0 overruns:0 frame:0
          TX packets:34512 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:21410099 (21.4 MB)  TX bytes:4802798 (4.8 MB)
          Interrupt:43 Base address:0xa000

যখন

lspci -v

আইআরকিউর সাথে পিসিআই তথ্য দেয়

যেমন।

04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 01)
    Subsystem: Acer Incorporated [ALI] Device 0245
    Flags: bus master, fast devsel, latency 0, IRQ 43
    I/O ports at e800 [size=256]
    Memory at febff000 (64-bit, non-prefetchable) [size=4K]
    Expansion ROM at febc0000 [disabled] [size=128K]
    Capabilities: <access denied>
    Kernel driver in use: r8169
    Kernel modules: r8169

যেহেতু আমি দেখতে উভয় 43 আমি যে অনুমান করতে পারেন eth2ম্যাচ04:00.0


আপনার সদয় প্রতিক্রিয়া জন্য ধন্যবাদ। lshw আমাকে আরও ভাল সমাধান সরবরাহ করেছে :)
ওয়াকাস

0

আর একটি সমাধান, ব্যবহার করে udevadm

udevadm info -a -p /sys/class/net/eth{0..10} | awk '/device.*eth/'

{0..10}- থেকে সূচনা পরীক্ষা করে eth0...eth10

অতএব আপনি এই আদেশ ব্যবহার করতে পারেন

pci_address=$(udevadm info -a -p /sys/class/net/eth{0..10} | awk -F/ '/device.*eth/ {print $4}')

উদাহরণ আউটপুট

looking at device '/devices/pci0000:00/0000:00:03.0/net/eth0':

সুতরাং ঠিকানা হয়

0000:00:03.0

অথবা আপনার ক্ষেত্রে একটি একক আদেশ দিয়ে

% pci_address=$(udevadm info -a -p /sys/class/net/eth{0..10} | awk -F/ '/device.*eth/ {print $4}')
% echo $pci_address
0000:00:03.0

বা একটি স্ক্রিপ্টে

#!/bin/bash
udevadm info -a -p /sys/class/net/"$1" | awk -F/ '/device.*eth/ {print $4}'

সাথে স্ক্রিপ্ট কল করুন

script_name eth0

আউটপুট হয়

0000:00:03.0

ঝরঝরে প্রোগ্রাম udevadm! নতুন কিছু শিখেছি +1
সের্গেই কলডিয়াজনি

@ সার্জ আমার একটি আলাদা সমাধানের দরকার ছিল;)
এবি

@ এ্যাব lshwএবং উপরোক্ত পদ্ধতির পদ্ধতি আমাকে দুটি আলাদা ফলাফল দিচ্ছে। দু'জনেই কি একই পিসি ঠিকানা সরবরাহ করা উচিত নয়? চিয়ার্স
ওয়াকাস

@ ওয়াকাস আমি বুঝতে পারি না।
এবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.