احصل على واصف ملف IOCTL لمنفذ Ethernet
سؤال
أحتاج إلى الحصول على واصف الملف لاستخدامه في IOCTL () يدعو إلى منفذ Ethernet في Linux. غير متأكد من كيفية القيام بذلك.
المحلول
ما عليك سوى استخدام واصف الملف الخاص بمقبس مفتوح ، باستخدام اسم الجهاز في ifreq
تم تمرير الهيكل إلى ioctl()
, ، على افتراض أن برنامجك لديه أذونات كافية للقيام بذلك.
من المستندات:
يدعم Linux بعض IOCTLs القياسية لتكوين أجهزة الشبكة. يمكن استخدامها على واصف ملف المقبس بغض النظر عن الأسرة أو النوع. يمرون بنية IFREQ:
لا يلزم أن يكون المقبس ملزماً بالجهاز المستهدف ، أو يكون من أي عائلة محددة. أي مقبس مفتوح سيفعله (مرة أخرى ، مع امتيازات مناسبة) ، فقط افتح واحدة لمهمتك المحددة ، انتظر ioctl()
للعودة وإغلاقه.
نرى man 7 netdevice
لمزيد من هنا إذا لم يكن لديك حزم الوثائق المناسبة المثبتة (تلميح ، يتم تسمية الحزمة عادة manpages-dev
أو manpages-devel
, ، اعتمادا على توزيعي)
يمكنك أيضًا إلقاء نظرة على المصدر إلى net-tools
الحزمة ، والتي يمكن تسميتها بشكل مختلف اعتمادا على التوزيعات الخاصة بك. هذا هو المصدر ifconfig
(دبيان / أوبونتو هنا).
آسف على الغموض الأصلي ، اعتقدت أنك تحاول تكوين جهاز خاص متعدد الوظائف (لست متأكدًا من السبب الآن ، وربما قلة النوم).
نصائح أخرى
يمكنك أن تفعل شيئًا كهذا fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)
يستخدم strace
لمعرفة ما هي الوظائف ifconfig المكالمات.