প্রকল্প সম্পর্কে

pktc একটি CLI টুল এবং ট্রি-টাইলিং কম্পাইলার যা আপনাকে নেটওয়ার্ক ওয়্যারে আপনি যে প্যাকেট গঠন আশা করেন তা বর্ণনা করতে দেয় এবং স্বয়ংক্রিয়ভাবে সংশ্লিষ্ট লিনাক্স kernel টানেল ডিভাইস কনফিগারেশন নির্ধারণ করে। netplan, systemd-networkd এবং NetworkManager প্রথমে একটি ডিভাইস প্রকার নামকরণ করে এবং তারপর প্যারামিটার পূরণ করতে বলে, pktc বিপরীত পদ্ধতি অবলম্বন করে: আপনি এনক্যাপসুলেশন স্তূপকে একটি গাছ হিসাবে বর্ণনা করেন, এবং টুলটি নির্ধারণ করে কোন kernel primitive এটি উৎপন্ন করে। মূল ধারণা হল ট্রি টাইলিংয়ের মাধ্যমে ইনস্ট্রাকশন নির্বাচন। একটি এনক্যাপসুলেশন স্তূপ একটি spine-এ রূপান্তরিত হয় — একটি রৈখিক তালিকা হিসাবে প্রোটোকল স্তর — যা luego device-shaped tiles দিয়ে আচ্ছাদিত হয়। এই প্রক্রিয়াটি compiler back end কীভাবে machine instruction নির্বাচন করে তার সাথে মিলে, শুধুমাত্র পার্থক্য হল tiles হল Linux tunnel devices এবং নির্গত কোড হল iproute2 commands। সমর্থিত tiles মধ্যে IPIP (ipv4 · ipv4), GRE (ipv4 · gre · ipv4), GRE tap (ipv4 · gre · ethernet), এবং VXLAN (ipv4 · udp · vxlan · ethernet) অন্তর্ভুক্ত। Nested tunnels স্বাভাবিকভাবে একাধিক tiles হিসাবে যুক্ত হয় special-case logic ছাড়াই। প্রধান commands: - `pktc lower` — ডিভাইস তৈরির জন্য `ip link` / `ip addr` commands মুদ্রণ করে - `pktc mirror` — দূরের প্রান্তের জন্য সমমিত কনফিগারেশন মুদ্রণ করে - `pktc expect` — যাচাইয়ের জন্য underlay traffic কী দেখতে হবে তা মুদ্রণ করে - `pktc parse` — একটি description file থেকে encapsulation spine মুদ্রণ করে একটি স্বতন্ত্র বৈশিষ্ট্য হল loop-closing test mode: `make netns` একটি veth pair-এ দুটি network namespaces তৈরি করে, একই description থেকে উভয় প্রান্ত কনফিগার করে, traffic চালু করে এবং underlay capture করে। একটি golden test প্রমাণ করে যে নির্ধারিত commands নির্গত হয়েছিল; একটি kernel test প্রমাণ করে যে ডিভাইস তৈরি হয়েছিল; capture প্রমাণ করে যে ডিভাইস গাছ দাবি করা কিছু বহন করে। `go install github.com/vinodhalaharvi/pktc/cmd/pktc@latest` এর মাধ্যমে ইনস্টল করুন বা `make check`, `make demo`, এবং `make netns` দিয়ে source থেকে build করুন। প্রজেক্টটি early-stage এবং চারটি tiles এবং এক backend নিয়ে কাজ করছে। Geneve, VLAN, XFRM, এবং WireGuard উদ্দেশ্যভিত্তিকভাবে বাদ দেওয়া হয়েছে কারণ তাদের kernel modules ডেভেলপমেন্ট সময় উপলব্ধ ছিল না।