2016-03-22 6 views
6

लिनक्स पर, सी का उपयोग करके, मैं पुल डिवाइस का नाम ढूंढ सकता हूं जो मेरा ईथरनेट इंटरफ़ेस से जुड़ा हुआ है? क्या ioctl() कॉल का अनुक्रम है जो मुझे मास्टर पुल डिवाइस खोजने की आवश्यकता है?सी में मेरे टैप एडाप्टर के लिए पुल डिवाइस का नाम मैं कैसे ढूंढ सकता हूं?

मेरे सी कार्यक्रम के एक विन्यास फाइल से मेरी नल अनुकूलक के उपकरण नाम (इस मामले, tap0 में) को जानता है। आखिरकार, मुझे आईपी पता चाहिए कि मेरा टीएपी एडाप्टर जवाब दे। क्योंकि यह ब्रिज किया गया है, टीएपी एडाप्टर में आईपी पता नहीं है; यह bridge डिवाइस है जिसमें आईपी पता है।

मैं एक नल डिवाइस और VETH डिवाइस एक साथ पाट की है।

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
2: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 500 
    link/ether 22:d4:fa:a4:89:81 brd ff:ff:ff:ff:ff:ff 
3: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 22:8c:ee:b8:e3:30 brd ff:ff:ff:ff:ff:ff 
    inet 10.20.30.40/24 scope global br0 
     valid_lft forever preferred_lft forever 
45: veth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000 
    link/ether 22:8c:ee:b8:e3:30 brd ff:ff:ff:ff:ff:ff 

नोट tap0 और veth0 प्रविष्टियों: ip a निम्नलिखित चलता उनके पुल मास्टर से प्रत्येक br0 है (यानी, वे पुल master br0 है)।

जब मैं फोन ioctl(SIOCGIFFLAGS), और बाद में ioctl(SIOCGIFPFLAGS) जब ifr_nametap0 है, केवल झंडे सेट कर रहे हैं कि IFF_UP और IFF_BROADCAST हैं। मैं यहां से कहां से जाना चाहता हूं।

+0

आप @stark कि पार्स करने 'आईपी A' से कम वांछनीय है' brctl show' – stark

+0

के उत्पादन को पार्स सकता है। यह 'पुल-यूटिल्स' पैकेज स्थापित करने की आवश्यकता को लागू करता है। सभी ब्रिजिंग केवल 'iproute2' सूट का उपयोग करके स्थापित की गई थीं। – scottbb

+2

आप 'आईपी ए' पर 'स्ट्रेस' का उपयोग करने का प्रयास कर सकते हैं और देख सकते हैं कि यह क्या करता है। –

उत्तर

1

iputils और दोस्तों गिरी और यूज़रस्पेस के बीच rtnetlink एपीआई का उपयोग (इसे POSIX सॉकेट एपीआई अभी भी सभी आवश्यक कार्य करने के लिए संकीर्ण है, और कोई साफ रास्ता सूचनाएं जोड़ने के लिए)। यदि आपकी परियोजना छोटी है, तो आईपी उपयोगिता से आउटपुट को पार्स करने के लिए शायद यह आसान और तेज़ है। यह एम्बेडेड लिनक्स प्रोजेक्ट के लिए नेटवर्क कॉन्फ़िगरेशन डिमन लिखने के अनुभव से है। आरटीनेटलिंक एपीआई शुरू में उपयोग करने में थोड़ा मुश्किल है, लेकिन यदि आप वास्तव में (कई पॉइंटर्स और आकार-संदर्भों को सही करने की आवश्यकता है), तो थोड़ा सा शोध करें और प्रारंभिक बिंदु के रूप में iputils स्रोत का उपयोग करें।

संबंधित मुद्दे