مرحبًا بك في مستودع picoTCP الوحيد والوحيد.
picoTCP عبارة عن حزمة TCP/IP معيارية صغيرة الحجم مصممة للأنظمة المدمجة وإنترنت الأشياء. يتم تطويره بشكل نشط بواسطة شركة Altran Intelligent Systems .
تم إصدار هذا الكود بموجب شروط GNU GPL v2 وGNU GPL v3. بعض الحقوق محفوظة. قد يتم تطبيق تراخيص أخرى وفقًا لتقدير أصحاب حقوق الطبع والنشر.
تعرف على كيفية استخدام picoTCP في مشروعك من خلال الاطلاع على دليل البدء على موقع GitHub wiki الخاص بنا.
لمزيد من المعلومات، أرسل لنا بريدًا إلكترونيًا أو اتصل بنا على Twitter أو Facebook أو Reddit.
هل تتساءل عن جودة كود picoTCP؟ تحقق من نقاط TiCS الخاصة بنا
الاختبارات الوظيفية: - اختبارات الوحدة: - الامتثال لـ RFC: - جودة TICS: حالة بناء Coverity Scan:
من خلال الحفاظ على واجهات بسيطة، يكون جهد النقل إلى الأنظمة الأساسية وأنظمة التشغيل الجديدة منخفضًا جدًا. لإعطائك إشارة: يمكن إجراء النقل إلى منصة جديدة في 3 أيام أو أقل، ونظام تشغيل جديد في يوم واحد، وإذا كنت مجنونًا حقًا، فيمكنك إجراء عملية نقل أولية في أمسية واحدة. الأنظمة الأساسية المختلفة تعني مترجمين مختلفين، ولهذا السبب نقوم باستمرار بتجميع مكدسنا مع مجموعة منهم. تعرض القائمة التالية بعض الأنظمة الأساسية وبرامج تشغيل الأجهزة والمترجمين المدعومة حاليًا.
تعمل الأنظمة الأساسية picoTCP على : سلسلة ARM Cortex-M (ST Micro STM، NXP LPC، TI Stellaris، Freescale K64F)، سلسلة ARM ARM9 (ST Micro STR9)، Texas Instruments (MSP430)، Microchip (PIC24، PIC32)، Atmel ( AVR 8 بت)، Linux (مساحة المستخدم (TUN/TAP)، مساحة Kernel)، Windows (مساحة المستخدم (TAP))
أجهزة الشبكة التي عملت picoTCP معها : BCM43362 (IEEE 802.11)، MRF24WG (IEEE 802.11)، LPC Ethernet ENET/EMAC (IEEE 802.3)، Stellaris Ethernet (IEEE 802.3)، STM32 Ethernet (IEEE 802.3)، Wiznet W5100 (IEEE 802.3)، USB CDC-ECM (CDC1.2)، PPP، برامج التشغيل الافتراضية (TUN/TAP، VDE، Libpcap)
(RT) تم دمج أنظمة تشغيل picoTCP في : No OS / Bare metal، FreeRTOS، mbed-RTOS، Frosted، linux / POSIX، MS DOS، MS Windows
تم دمج مكتبات picoTCP مع : wolfSSL، mbedTLS، مكتبة Mongoose RESTful، MicroPython
المترجمين picoTCP يجمع تحت : دول مجلس التعاون الخليجي، Clang، TCC، ARM-RCVT، IAR، XC-16، XC-32، MSP-GCC، AVR-GCC
لسوء الحظ، لا يمكننا إصدار جميع التعليمات البرمجية، لأن بعض الأجزاء تعتمد على تعليمات برمجية أو ثنائيات غير متوافقة مع GPL، وقد تم تطوير بعض الأجزاء بموجب عقد تجاري، وبعضها يتكون من تعليمات برمجية تقريبية لإثبات المفهوم. إذا كنت تريد معرفة المزيد عن التوفر بموجب الرخصة التجارية، أو إمكانية استخدام خدماتنا المتخصصة للنقل أو تطوير برامج التشغيل، فلا تتردد في الاتصال بنا على [email protected].
المفضل لديك ليس في القائمة؟ قم بمراجعة الويكي للحصول على معلومات وأمثلة حول كيفية نقل picoTCP إلى منصة جديدة!
تم تطوير الميزات كوحدات نمطية في picoTCP، مما يسمح لك باختيار الميزات التي تريدها في تطبيقك. وينتج عن ذلك أصغر حزمة ممكنة تظل متوافقة مع معايير الإنترنت. يوفر التخطيطي أدناه نظرة عامة على كافة البروتوكولات المنفذة.
يستخدم هذا المثال Ubuntu 14.04. وهو يعمل أيضًا على توزيعات Linux الأخرى، على الرغم من أنك قد تحتاج إلى تغيير بعض أسماء الحزم. راجع إعداد البيئة للحصول على مزيد من المعلومات.
sudo apt-get install git check vde2 libvdeplug2-dev libpcap0.8-dev openvpn wireshark
git clone https://github.com/tass-belgium/picotcp
cd picotcp
make TAP=1
cd ..
ثم أنشئ دليلًا جديدًا، على سبيل example
، وأنشئ ملفًا بالمحتوى التالي: //: # (يتم سحب الكود أدناه من خلال CI الخاص بنا - يرجى ترك تعليقات مستخرج الكود كما هي!) //: # (بدء مستخرج الكود)
#include
#include
#include
#include
#include
#define NUM_PING 10
static int finished = 0 ;
/* gets called when the ping receives a reply, or encounters a problem */
void cb_ping ( struct pico_icmp4_stats * s )
{
char host [ 30 ];
pico_ipv4_to_string ( host , s -> dst . addr );
if ( s -> err == 0 ) {
/* if all is well, print some pretty info */
printf ( "%lu bytes from %s: icmp_req=%lu ttl=%lu time=%lu msn" , s -> size ,
host , s -> seq , s -> ttl , ( long unsigned int ) s -> time );
if ( s -> seq >= NUM_PING )
finished = 1 ;
} else {
/* if something went wrong, print it and signal we want to stop */
printf ( "PING %lu to %s: Error %dn" , s -> seq , host , s -> err );
finished = 1 ;
}
}
int main ( void ){
int id ;
struct pico_ip4 ipaddr , netmask ;
struct pico_device * dev ;
/* initialise the stack. Super important if you don't want ugly stuff like
* segfaults and such! */
pico_stack_init ();
/* create the tap device */
dev = pico_tap_create ( "tap0" );
if (! dev )
return -1 ;
/* assign the IP address to the tap interface */
pico_string_to_ipv4 ( "192.168.5.4" , & ipaddr . addr );
pico_string_to_ipv4 ( "255.255.255.0" , & netmask . addr );
pico_ipv4_link_add ( dev , ipaddr , netmask );
printf ( "starting pingn" );
id = pico_icmp4_ping ( "192.168.5.5" , NUM_PING , 1000 , 10000 , 64 , cb_ping );
if ( id == -1 )
return -1 ;
/* keep running stack ticks to have picoTCP do its network magic. Note that
* you can do other stuff here as well, or sleep a little. This will impact
* your network performance, but everything should keep working (provided
* you don't go overboard with the delays). */
while ( finished != 1 )
{
usleep ( 1000 );
pico_stack_tick ();
}
printf ( "finished !n" );
return 0 ;
}
الآن يمكننا تجميع هذا وربطه، عن طريق التشغيل
gcc -c -o main.o -I../picotcp/build/include main.c
gcc -o main.elf main.o ../picotcp/build/lib/libpicotcp.a
بعد ذلك، سنقوم بإنشاء جهاز النقر المستمر - منفذ شبكة افتراضي. لا تحتاج إلى تكرار ذلك في كل مرة، سيظل الجهاز موجودًا حتى تقوم بإعادة التشغيل، أو حتى تذهب sudo tunctl -d tap0
sudo tunctl -u < username >
sudo ifconfig tap0 192.168.5.5
الآن، يجب أن تكون قادرًا على تشغيل ./main.elf
ورؤية الإخراج مثل
Protocol ethernet registered (layer: 2).
Protocol ipv4 registered (layer: 3).
Protocol ipv6 registered (layer: 3).
Protocol icmp4 registered (layer: 4).
Protocol icmp6 registered (layer: 4).
Protocol igmp registered (layer: 4).
Protocol udp registered (layer: 4).
Protocol tcp registered (layer: 4).
Device tap0 created.
Assigned ipv4 192.168.5.4 to device tap0
starting ping
64 bytes from 192.168.5.5: icmp_req=1 ttl=64 time=5 ms
64 bytes from 192.168.5.5: icmp_req=2 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=3 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=4 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=5 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=6 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=7 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=8 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=9 ttl=64 time=0 ms
64 bytes from 192.168.5.5: icmp_req=10 ttl=64 time=0 ms
finished !
أثناء تشغيل التطبيق، يمكنك أيضًا تشغيله
ping 192.168.5.4
لإرسال الأصوات في الاتجاه الآخر.
قم بتشغيل wireshark، وتعرف على واجهة Tap0. ثم قم بتشغيل ./main.elf
مرة أخرى، وانظر ماذا سيحدث. من المفترض أن تشاهد طلب ARP من picoTCP إلى Linux والرد. بعد ذلك، يجب أن تشاهد طلبات ping والردود ذهابًا وإيابًا.
لاحظ أنه في بعض الأحيان قد ترى الكثير من الأشياء الأخرى، مثل طلبات توجيه IPv6، وعمليات البث المختلفة، وmDNS، وDNS-SD، وما إلى ذلك - وهذا هو الوقت الذي يلاحظ فيه Linux أن واجهة الشبكة الجديدة قيد التشغيل، ويبدأ جميع أنواع الاكتشافات. مع جهاز TAP المستمر، يحدث هذا عادةً فقط في المرة الأولى التي تقوم فيها بتشغيل التطبيق. ابدأ عملية التقاط wireshark جديدة، ثم ابدأ التطبيق مرة أخرى، يجب أن يكون أكثر نظافة الآن.
الآن يمكنك إجراء بعض التغييرات على ملف main.c
، والتجربة قليلاً! احتفظ ببعض الإحصائيات الخاصة بأصواتك (الحد الأقصى، الحد الأدنى، متوسط الوقت). افتح مقبس UDP، وأرسل بعض الأشياء إلى مثيل netcat على نظام Linux الخاص بك. أو أنشئ ماسحًا ضوئيًا بدائيًا للمنافذ، واطلع على المنافذ المفتوحة على جهازك.
هذه مجرد نظرة عامة سريعة جدًا، ويمكن العثور على مزيد من المعلومات في الويكي الخاص بنا.
المساهمين هي موضع ترحيب كبير. أبلغ عن خطأ، أو اقترح طريقة لتحسين وثائقنا، أو اكتب بعض التعليمات البرمجية الجديدة.
ومع ذلك، لاحظ أنه قبل قبول الكود الخاص بك، سنطلب منك التوقيع على اتفاقية ترخيص المساهمين الخاصة بنا. يظل الكود الخاص بك خاضعًا لحقوق الطبع والنشر الخاصة بك، وسيكون متاحًا دائمًا بموجب GPLv2 وGPLv3. ومع ذلك، فإن اتفاقية ترخيص الوصول (CLA) هذه تمكننا من استخدام picoTCP (بما في ذلك التعليمات البرمجية من المساهمين الخارجيين مثلك) بموجب تراخيص أخرى، بما في ذلك ترخيصنا التجاري. من خلال القيام بمشاريع تجارية، يمكننا الاستمرار في الاستثمار في جودة وميزات picoTCP.