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


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.