2014-04-23 2 views
6

में wpa_supplicant के साथ इंटरफेस करने के लिए एक बाहरी प्रोग्राम लिखना जैसा कि मैं समझता हूं कि कोई भी एक बाहरी प्रोग्राम में wpa_ctrl.c को लिंक कर सकता है और फिर आप wpa_supplicant से जानकारी को नियंत्रित करने और प्राप्त करने के लिए इसके कार्यों का उपयोग करने में सक्षम हैं।सी ++

किसी को, एक उदाहरण उपलब्ध कराएं, तो अधिमानतः सी ++ में कैसे तुम करोगी:

  1. लिंक wpa_ctrl.c फ़ाइल के लिए बाहरी कार्यक्रम।
  2. कोड एक 'स्कैन' होते हैं और फिर प्रिंट 'scan_results' के लिए दिखाई देंगे।

मैं एम्बेडेड लिनक्स प्लेटफ़ॉर्म पर कोडिंग करने के लिए नया हूं और इसके कहीं भी कोई उदाहरण नहीं हैं। अग्रिम में बहुत धन्यवाद!

उत्तर

7

कार्यक्रम wpa_cli आप अपनी ज़रुरत का एक उदाहरण है। wpa_supplicant परियोजना को देखने के लिए क्या यह निष्पादन योग्य बनाने के लिए आवश्यक है V=1 विकल्प का समर्थन। यहाँ मेरी एआरएम निर्माण के लिए परिणाम

gcc -c -o wpa_cli.o -MMD -O2 -Wall -g -I src -I src/utils \ 
    -Iusr_ARM/include/libnl3 \ 
    -DCONFIG_BACKEND_FILE -DCONFIG_IEEE80211W -DCONFIG_DRIVER_WEXT \ 
    -DCONFIG_WIRELESS_EXTENSION -DCONFIG_DRIVER_NL80211 -DCONFIG_LIBNL20 \ 
    -DEAP_PSK -DIEEE8021X_EAPOL -DCONFIG_SHA256 -DCONFIG_CTRL_IFACE \ 
    -DCONFIG_CTRL_IFACE_UNIX -DCONFIG_SME \ 
    wpa_cli.c 

gcc -o wpa_cli wpa_cli.o ../src/common/wpa_ctrl.o ../src/utils/wpa_debug.o \ 
    ../src/utils/common.o ../src/utils/os_unix.o ../src/utils/eloop.o \ 
    ../src/utils/edit_simple.o -lrt 

स्थानापन्न अपने रास्तों wpa_supplicant अपने लक्ष्य एआरएम उपकरण पर उपयोग के संस्करण (पहले आदेश में) के लिए हेडर प्राप्त करने के लिए है। वस्तुवास्तविक समय पुस्तकालय (-lrt के साथ) के साथ दूसरे कमान और लिंक में सूचीबद्ध फ़ाइलों के सभी के साथ लिंक। आप wpa_supplicant के अपने संस्करण के लिए wpa_cli.c पर भी जा सकते हैं ताकि आपूर्तिकर्ता प्रक्रिया को कमांड कैसे भेज सकें।

ऑब्जेक्ट सूची में wpa_ctrl.o (जैसा कि आपने अनुमान लगाया है) और कई अन्य शामिल हैं। उनमें से कुछ की आवश्यकता नहीं हो सकती है, आपके द्वारा उपयोग की जाने वाली सुविधाओं के आधार पर, लेकिन मैं पूरी सूची के साथ शुरू करूंगा और फिर आपके पास कार्य करने के उदाहरण के बाद उन्हें ट्रिम कर दूंगा।

लाइसेंस इस स्रोत पर उदार बीएसडी है।

यहाँ wpa_cli_cmd_scan() जो स्कैन अनुरोध भेजता है,

static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[]) 
{ 
    return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv); 
} 

आप शायद भी scan_results चाहते हैं; यह wpa_cli_cmd_scan_results() के समान फ़ाइल में है।

एपीआई भी well documented under wpa_supplicant control interface, जहाँ आप अपने काम कर रहे उदाहरण का विस्तार कर सकते हैं। सुनिश्चित करें कि आपको स्रोत मिल गया है जो आपके सिस्टम पर उपयोग में wpa_supplicant के संस्करण से मेल खाता है। उपरोक्त आदेश eglibc लिनक्स सिस्टम के लिए हैं; ऐसा लगता है कि बायोनिक (एंड्रॉइड लाइब्रेरी) डिफ़ॉल्ट रूप से -lrt की आपूर्ति करता है। यदि आप अपने डिवाइस के निर्माण के wpa_supplicant निर्देशिका में आदेशों को चला सकते हैं, rm wpa_cli.o; rm wpa_cli; make V=1 आपको आवश्यक सटीक आदेश दिखाई देंगे।

आप शायद edit_simple.o फ़ाइल जरूरत नहीं है। हालांकि, स्कैन अनुरोध पूरा होने पर eloop ड्राइवरों से अनचाहे ईवेंट प्राप्त करने की आवश्यकता है; कम से कम अगर आप कई अलग-अलग वाईफाई चिप्स के साथ काम करना चाहते हैं।चरण हैं,

  1. SCAN भेजें।
  2. <SCAN_COMPLETE> का इंतजार करें।
  3. SCAN_RESULTS भेजें।