Data Plane Development Kit

Overview
DPDK is a set of libraries and drivers for fast packet processing.
It supports many processor architectures and both FreeBSD and Linux.

The DPDK uses the Open Source BSD-3-Clause license for the core libraries
and drivers. The kernel components are GPL-2.0 licensed.

Please check the doc directory for release notes,
API documentation, and sample application information.

For questions and usage discussions, subscribe to: [email protected]
Report bugs and issues to the development mailing list: [email protected]
Comments
  • GitHub Workflows security hardening

    GitHub Workflows security hardening

    This PR adds explicit permissions section to workflows. This is a security best practice because by default workflows run with extended set of permissions (except from on: pull_request from external forks). By specifying any permission explicitly all others are set to none. By using the principle of least privilege the damage a compromised workflow can do (because of an injection or compromised third party tool or action) is restricted. It is recommended to have most strict permissions on the top level and grant write permissions on job level case by case.

    opened by sashashura 4
  • net/kni: set packet input port in eth_kni_rx()

    net/kni: set packet input port in eth_kni_rx()

    Store port_id in pmd_internals when eth kni device is created. Then set packet port of rte_mbuf in function eth_kni_rx.

    Signed-off-by: Jecky Pei [email protected]

    opened by jeckypei 3
  • ICE driver EEPROM bug fix

    ICE driver EEPROM bug fix

    Fix issue with final word being dropped when retrieving module EEPROM data for ICE driver.

    Take for simplicity the case when info->offset is zero and info->len is equal to SFF_READ_BLOCK_SIZE. In this case, memcpy would not be called despite there presumably being room in the buffer (as we have requested 8 bytes of data and the memcpy would write precisely 8 bytes). The same edge case will be hit on the final iteration of the for loop whenever a multiple of 8 bytes is requested, as the final word will not be written to the data buffer.

    opened by dmacdougal 2
  • ACL trie splitting

    ACL trie splitting

    Problem

    I was trying out the test-acl example on some large input files (> 10k ACL rules) to do a performance comparison, but no matter how large the input, it seems to always build 1 trie.

    If I understand correctly, it is supposed to split when there are 2048 nodes (this macro #define NODE_MIN 0x800 in acl_bld.c:20) , but when I stepped through with a debugger the node_count is negative, so node_count > context->cur_node_max never actually runs, so all the nodes created from the rules end up being in one trie. image

    This is the specific command I used to run test-acl.sh:

    /bin/bash app/test-acl/test-acl.sh build/app/dpdk-test-acl app/test-acl/input scalar 32
    

    I have also attached the rule/trace files which I modified to have 2k ACL rules (they are from app/test-acl/input/) acl1v4_5_rule.txt acl1v4_5_trace.txt

    Attempted Fix

    In this PR I have changed the condition to context->num_nodes > (context->cur_node_max * context->num_tries) and the outer loop to update context->num_tries. Using the same rules file, this time it generated 10k nodes and split into 5 tries as shown below, which is the expected behavior I think. image

    opened by arcyleung 2
  • doc: fix and add some message

    doc: fix and add some message

    1. Fixup the suffix of the PCI ID to consistent with the code: from wwww:xx:yy.z_port_n to wwww:xx:yy.z_portn
    2. Add specification of using Mac address to identify port.

    Signed-off-by: Chaoyong.He [email protected]

    opened by hechaoyong 2
  • Allow C++ source code as well a C source in projects.

    Allow C++ source code as well a C source in projects.

    Hi. We are working on a project with C and C++ source code. This change allows all the Makefile infrastructure to correctly work with C++ source files too. Please include it. Much thanks!

    opened by aharonscada 2
  • About pdump and dumpcap

    About pdump and dumpcap

    1. dpdk-dump and dpdk-dumpcap support multi process Rx / TX
    2. dpdk-dumpcap cleanup before exit
    3. sort mempool_ops table (rte_mempool_ops_table). the table has inconsistent values in different processes, which will cause MemPool to crash. (detail see : https://bugs.dpdk.org/show_bug.cgi?id=1073 ) the gdb values:

    myapp:

    (gdb) p rte_mempool_ops_table $4 = {sl = {locked = 0}, num_ops = 11, ops = {{name = "bucket", '\000' <repeats 25 times>, alloc = 0x7b64a9

    dpdk-pdump:

    (gdb) p rte_mempool_ops_table $1 = {sl = {locked = 0}, num_ops = 11, ops = {{name = "ring_mp_mc", '\000' <repeats 21 times>, alloc = 0x76ed58

    detail:

    Thread 17 "lcore-slave-79" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fffee4e2700 (LWP 46107)] 0x00000000007b2064 in bucket_stack_pop_unsafe (stack=0x14f37cc80) at /dpdk/dpdk-src/drivers/mempool/bucket/rte_mempool_bucket.c:89 89 return stack->objects[--stack->top]; (gdb) p rte_mempool_ops_table

    $4 = {sl = {locked = 0}, num_ops = 11, ops = {{name = "bucket", '\000' <repeats 25 times>, alloc = 0x7b64a9 <bucket_alloc>, free = 0x7b6934 <bucket_free>, enqueue = 0x7b2df1 <bucket_enqueue>, dequeue = 0x7b555d <bucket_dequeue>, get_count = 0x7b63df <bucket_get_count>, calc_mem_size = 0x7b69c5 <bucket_calc_mem_size>, populate = 0x7b6a4a <bucket_populate>, get_info = 0x7b6c0c <bucket_get_info>, dequeue_contig_blocks = 0x7b5bf7 <bucket_dequeue_contig_blocks>}, {name = "dpaa", '\000' <repeats 27 times>, alloc = 0x7b6f69 <dpaa_mbuf_create_pool>, free = 0x7b885b <dpaa_mbuf_free_pool>, enqueue = 0x7b8982 <dpaa_mbuf_free_bulk>, dequeue = 0x7b8ad9 <dpaa_mbuf_alloc_bulk>, get_count = 0x7b8ce2 <dpaa_mbuf_get_count>, calc_mem_size = 0x0, populate = 0x7b8d69 <dpaa_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, { name = "dpaa2", '\000' <repeats 26 times>, alloc = 0x7b91d0 <rte_hw_mbuf_create_pool>, free = 0x7baaa3 <rte_hw_mbuf_free_pool>, enqueue = 0x7bb07b <rte_hw_mbuf_free_bulk>, dequeue = 0x7baeba <rte_dpaa2_mbuf_alloc_bulk>, get_count = 0x7bb0f4 <rte_hw_mbuf_get_count>, calc_mem_size = 0x0, populate = 0x7bb1b6 <dpaa2_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "octeontx_fpavf", '\000' <repeats 17 times>, alloc = 0x7bcea1 <octeontx_fpavf_alloc>, free = 0x7bcfd3 <octeontx_fpavf_free>, enqueue = 0x7bd003 <octeontx_fpavf_enqueue>, dequeue = 0x7bd085 <octeontx_fpavf_dequeue>, get_count = 0x7bd158 <octeontx_fpavf_get_count>, calc_mem_size = 0x7bd17e <octeontx_fpavf_calc_mem_size>, populate = 0x7bd1f7 <octeontx_fpavf_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "octeontx2_npa", '\000' <repeats 18 times>, alloc = 0x7beb4d <otx2_npa_alloc>, free = 0x7bedcd <otx2_npa_free>, enqueue = 0x7bdea5 <otx2_npa_enq>, dequeue = 0x7bdfd0 <otx2_npa_deq>, get_count = 0x7be08f <otx2_npa_get_count>, calc_mem_size = 0x7bee7f <otx2_npa_calc_mem_size>, populate = 0x7beede <otx2_npa_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, { name = "ring_mp_mc", '\000' <repeats 21 times>, alloc = 0x7c2fb1 <common_ring_alloc>, free = 0x7c3099 <common_ring_free>, enqueue = 0x7c19c7 <common_ring_mp_enqueue>, dequeue = 0x7c24bf <common_ring_mc_dequeue>, get_count = 0x7c2f93 <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_sp_sc", '\000' <repeats 21 times>, alloc = 0x7c2fb1 <common_ring_alloc>, free = 0x7c3099 <common_ring_free>, enqueue = 0x7c1f43 <common_ring_sp_enqueue>, dequeue = 0x7c2a29 <common_ring_sc_dequeue>, get_count = 0x7c2f93 <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_mp_sc", '\000' <repeats 21 times>, alloc = 0x7c2fb1 <common_ring_alloc>, free = 0x7c3099 <common_ring_free>, enqueue = 0x7c19c7 <common_ring_mp_enqueue>, dequeue = 0x7c2a29 <common_ring_sc_dequeue>, get_count = 0x7c2f93 <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_sp_mc", '\000' <repeats 21 times>, alloc = 0x7c2fb1 <common_ring_alloc>, free = 0x7c3099 <common_ring_free>, enqueue = 0x7c1f43 <common_ring_sp_enqueue>, dequeue = 0x7c24bf <common_ring_mc_dequeue>, get_count = 0x7c2f93 <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "stack", '\000' <repeats 26 times>, alloc = 0x7c325d <stack_alloc>, free = 0x7c3c0d <stack_free>, enqueue = 0x7c329b <stack_enqueue>, dequeue = 0x7c3759 <stack_dequeue>, get_count = 0x7c3bb3 <stack_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "lf_stack", '\000' <repeats 23 times>, alloc = 0x7c327c <lf_stack_alloc>, free = 0x7c3c0d <stack_free>, enqueue = 0x7c329b <stack_enqueue>, dequeue = 0x7c3759 <stack_dequeue>, get_count = 0x7c3bb3 <stack_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}}}

    dpdk-pdump:

    Thread 1 "dpdk-pdump" received signal SIGINT, Interrupt. __rte_ring_move_cons_head (entries=0x7fffffffdb64, new_head=0x7fffffffdb68, old_head=0x7fffffffdb6c, behavior=RTE_RING_QUEUE_VARIABLE, n=0, is_sc=0, r=0x14f348680) at /dpdk/dpdk-src/build/x86_64-cascadelake-linuxapp-gcc/include/rte_ring_generic.h:157 157 if (unlikely(n == 0)) (gdb) p rte_mempool_ops_table

    $1 = {sl = {locked = 0}, num_ops = 11, ops = {{name = "ring_mp_mc", '\000' <repeats 21 times>, alloc = 0x76ed58 <common_ring_alloc>, free = 0x76ee40 <common_ring_free>, enqueue = 0x76d76e <common_ring_mp_enqueue>, dequeue = 0x76e266 <common_ring_mc_dequeue>, get_count = 0x76ed3a <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_sp_sc", '\000' <repeats 21 times>, alloc = 0x76ed58 <common_ring_alloc>, free = 0x76ee40 <common_ring_free>, enqueue = 0x76dcea <common_ring_sp_enqueue>, dequeue = 0x76e7d0 <common_ring_sc_dequeue>, get_count = 0x76ed3a <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_mp_sc", '\000' <repeats 21 times>, alloc = 0x76ed58 <common_ring_alloc>, free = 0x76ee40 <common_ring_free>, enqueue = 0x76d76e <common_ring_mp_enqueue>, dequeue = 0x76e7d0 <common_ring_sc_dequeue>, get_count = 0x76ed3a <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "ring_sp_mc", '\000' <repeats 21 times>, alloc = 0x76ed58 <common_ring_alloc>, free = 0x76ee40 <common_ring_free>, enqueue = 0x76dcea <common_ring_sp_enqueue>, dequeue = 0x76e266 <common_ring_mc_dequeue>, get_count = 0x76ed3a <common_ring_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "octeontx2_npa", '\000' <repeats 18 times>, alloc = 0x7706d1 <otx2_npa_alloc>, free = 0x770951 <otx2_npa_free>, enqueue = 0x76fa29 <otx2_npa_enq>, dequeue = 0x76fb54 <otx2_npa_deq>, get_count = 0x76fc13 <otx2_npa_get_count>, calc_mem_size = 0x770a03 <otx2_npa_calc_mem_size>, populate = 0x770a62 <otx2_npa_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, { name = "bucket", '\000' <repeats 25 times>, alloc = 0x7ef4f4 <bucket_alloc>, free = 0x7ef97f <bucket_free>, enqueue = 0x7ebe3c <bucket_enqueue>, dequeue = 0x7ee5a8 <bucket_dequeue>, get_count = 0x7ef42a <bucket_get_count>, calc_mem_size = 0x7efa10 <bucket_calc_mem_size>, populate = 0x7efa95 <bucket_populate>, get_info = 0x7efc57 <bucket_get_info>, dequeue_contig_blocks = 0x7eec42 <bucket_dequeue_contig_blocks>}, {name = "stack", '\000' <repeats 26 times>, alloc = 0x7efdf5 <stack_alloc>, free = 0x7f07a5 <stack_free>, enqueue = 0x7efe33 <stack_enqueue>, dequeue = 0x7f02f1 <stack_dequeue>, get_count = 0x7f074b <stack_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "lf_stack", '\000' <repeats 23 times>, alloc = 0x7efe14 <lf_stack_alloc>, free = 0x7f07a5 <stack_free>, enqueue = 0x7efe33 <stack_enqueue>, dequeue = 0x7f02f1 <stack_dequeue>, get_count = 0x7f074b <stack_get_count>, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "dpaa", '\000' <repeats 27 times>, alloc = 0x7f0b77 <dpaa_mbuf_create_pool>, free = 0x7f2469 <dpaa_mbuf_free_pool>, enqueue = 0x7f2590 <dpaa_mbuf_free_bulk>, dequeue = 0x7f26e7 <dpaa_mbuf_alloc_bulk>, get_count = 0x7f28f0 <dpaa_mbuf_get_count>, calc_mem_size = 0x0, populate = 0x7f2977 <dpaa_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "dpaa2", '\000' <repeats 26 times>, alloc = 0x7f2dde <rte_hw_mbuf_create_pool>, free = 0x7f46b1 <rte_hw_mbuf_free_pool>, enqueue = 0x7f4c89 <rte_hw_mbuf_free_bulk>, dequeue = 0x7f4ac8 <rte_dpaa2_mbuf_alloc_bulk>, get_count = 0x7f4d02 <rte_hw_mbuf_get_count>, calc_mem_size = 0x0, populate = 0x7f4dc4 <dpaa2_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = "octeontx_fpavf", '\000' <repeats 17 times>, alloc = 0x130695e <octeontx_fpavf_alloc>, free = 0x1306a90 <octeontx_fpavf_free>, enqueue = 0x1306ac0 <octeontx_fpavf_enqueue>, dequeue = 0x1306b42 <octeontx_fpavf_dequeue>, get_count = 0x1306c15 <octeontx_fpavf_get_count>, calc_mem_size = 0x1306c3b <octeontx_fpavf_calc_mem_size>, populate = 0x1306cb4 <octeontx_fpavf_populate>, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}, {name = '\000' <repeats 31 times>, alloc = 0x0, free = 0x0, enqueue = 0x0, dequeue = 0x0, get_count = 0x0, calc_mem_size = 0x0, populate = 0x0, get_info = 0x0, dequeue_contig_blocks = 0x0}}} (gdb)

    opened by tinboxw 1
  • net/ice: null field checks in ice_{r,t}x_queue_release

    net/ice: null field checks in ice_{r,t}x_queue_release

    In case rte_eth_dma_zone_reserve fails in ice_tx_queue_setup ice_tx_queue_release is called on 0 allocated but not initialized txq struct. This may happen on ENOMEM condition, size exhaustion of memconfig->memzones array as well as some others.

    opened by tomaszjonak 1
  • Add proper support for the IPv4 UDP mode for the netvsc driver

    Add proper support for the IPv4 UDP mode for the netvsc driver

    The current netvsc driver does not really support the IPv4 UDP RSS mode, as it does not handle the NDIS_HASH_UDP_IPV4 constant. Therefore trying to use that mode fails:

    hn_rndis_set(): RNDIS set 0x10204 failed: status 0xc000000d
    hn_rndis_conf_rss(): RSS config num queues=8 failed: 5
    hn_rss_hash_update(): rss reconfig failed (RSS disabled)
    

    This change aims at defining the NDIS constant and using it so that the RSS update can work properly.

    opened by remmog 1
  • Cannot initialize tailq: UIO_RESOURCE_LIST

    Cannot initialize tailq: UIO_RESOURCE_LIST

    Problem: Cannot initialize tailq: UIO_RESOURCE_LIST the terminal output is as follow:

    [root@iZuf690tpru1h6508oc4jrZ helloworld]# build/helloworld -l 0-3 -n 2
    EAL: Detected CPU lcores: 32
    EAL: Detected NUMA nodes: 1
    EAL: Detected shared linkage of DPDK
    EAL: UIO_RESOURCE_LIST tailq is already registered
    PANIC in tailqinitfn_rte_uio_tailq():
    Cannot initialize tailq: UIO_RESOURCE_LIST
    16: [build/helloworld() [0x400770]]
    15: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x7f04d7d1f555]]
    14: [build/helloworld() [0x4006c6]]
    13: [librte_eal.so.22(rte_eal_init+0x726) [0x7f04d80f8476]]
    12: [librte_eal.so.22(+0x19628) [0x7f04d80e4628]]
    11: [/lib64/libdl.so.2(dlopen+0x31) [0x7f04d77f8041]]
    10: [/lib64/libdl.so.2(+0x15ad) [0x7f04d77f85ad]]
    9: [/lib64/ld-linux-x86-64.so.2(+0xf7d4) [0x7f04d83e27d4]]
    8: [/lib64/libdl.so.2(+0xfab) [0x7f04d77f7fab]]
    7: [/lib64/ld-linux-x86-64.so.2(+0x13b8b) [0x7f04d83e6b8b]]
    6: [/lib64/ld-linux-x86-64.so.2(+0xf7d4) [0x7f04d83e27d4]]
    5: [/lib64/ld-linux-x86-64.so.2(+0x1459e) [0x7f04d83e759e]]
    4: [/lib64/ld-linux-x86-64.so.2(+0xf9c3) [0x7f04d83e29c3]]
    3: [/usr/local/lib64/dpdk/pmds-22.1/librte_bus_pci.so.22.1(+0x2a9c) [0x7f04c94a6a9c]]
    2: [librte_eal.so.22(__rte_panic+0xba) [0x7f04d80d807a]]
    1: [librte_eal.so.22(rte_dump_stack+0x1a) [0x7f04d80f9fea]]
    Aborted
    

    I search the problem online, and find the solution, but still confused about the operation: -> 把静态链接librte_.a都改成动态链接librte_.so. I wonder if there are some more specific operations ? Thanks!

    opened by liudongdong1 1
  • Adds  include inttypes.h

    Adds include inttypes.h

    Without this type def we get a compiler error: error: expected ')' before 'PRId64' Similar to the errors here: http://mails.dpdk.org/archives/test-report/2022-February/256520.html

    This is when being compiled on Cent7 using gcc version 4.8.5

    opened by mike006322 1
Owner
DPDK
Data Plane Development Kit
DPDK
The little C kit

ckit The little C kit bin/ckit — tool for building and testing projects (calls cmake & ninja) pkg/ — directory of some packages The main thing here is

Rasmus 44 Dec 17, 2022
A Linux reference software for building the Demo Core-Image on Renesas RZ/V2M Evaluation Kit

Introduction This repository is a Linux reference software for building the Demo Core-Image on Renesas RZ/V2M Evaluation Kit . You have to get the pro

Lexra Chang 3 Jan 20, 2022
Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths.

WDT Warp speed Data Transfer Design philosophy/Overview Goal: Lowest possible total transfer time - to be only hardware limited (disc or network bandw

Facebook 2.7k Dec 31, 2022
Enabling services on your device 81 Jan 6, 2023
ESP-IDF is the development framework for Espressif SoCs supported on Windows, Linux and macOS.

Espressif IoT Development Framework 中文版 ESP-IDF is the development framework for Espressif SoCs supported on Windows, Linux and macOS. ESP-IDF Release

Espressif Systems 9.7k Jan 4, 2023
Steve's Persistent Unreal Data library

SPUD: Steve's Persistent Unreal Data library What is it? SPUD is a save game and streaming level persistence solution for Unreal Engine 4. The 2 main

Steve Streeting 167 Jan 6, 2023
Steve's Unreal Quest System: data-driven quest system for UE4

Steve's Unreal Quest System (SUQS) What Is It? SUQS is a simple, data-driven quest system for UE4. It helps you define quest structures for your game,

Steve Streeting 66 Dec 11, 2022
Realtime Client/Server app for Linux allowing joystick (and other HID) data to be transferred over a local network

netstick What is it? Netstick enables HID devices to be remotely connected between a "client" and "server" over a network connection. It allows the ke

null 33 Nov 6, 2022
Upload arbitrary data via Apple's Find My network.

Send My allows you to to upload abritrary data from devices without an internet connection by (ab)using Apple's Find My network. The data is broadcasted via Bluetooth Low Energy and forwarded by nearby Apple devices.

Positive Security 1.5k Jan 2, 2023
Wifi MQTT Data Logging via an esp8266 for the Ikea VINDRIKTNING PM2.5 air quality sensor

MQTT connectivity for the Ikea VINDRIKTNING This repository contains an ESP8266 firmware, which adds MQTT to the Ikea VINDRIKTNING PM2.5 air quality s

Sören Beye 943 Dec 31, 2022
Tool for Preventing Data Exfiltration with eBPF

bouheki: Tool for Preventing Data Exfiltration with eBPF bouheki is a KSRI implementation using LSM Hook by eBPF. Flexibility to apply restricted netw

mrtc0 54 Jan 3, 2023
WDT Warp speed Data Transfer

Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths.

Meta Archive 2.7k Dec 31, 2022
Data-oriented networking playground for the reliable UDP transports

NetDynamics is a data-oriented networking playground for the reliable UDP transports. The application was created for stress testing and debugging a p

Stanislav Denisov 92 Nov 9, 2022
A small data-oriented and SIMD-optimized 3D rigid body physics library.

nudge Nudge is a small data-oriented and SIMD-optimized 3D rigid body physics library. For more information, see: http://rasmusbarr.github.io/blog/dod

null 239 Dec 10, 2022
A software C library designed to extract data attributes from network packets, server logs, and from structured events in general, in order to make them available for analysis

MMT-DPI A software C library desinged to extract data attributes from network packets, server logs, and from structured events in general, in odrder t

Montimage 3 Nov 9, 2022
KVDK (Key-Value Development Kit) is a key-value store library implemented in C++ language

KVDK (Key-Value Development Kit) is a key-value store library implemented in C++ language. It is designed for persistent memory and provides unified APIs for both volatile and persistent scenarios. It also demonstrates several optimization methods for high performance with persistent memory. Besides providing the basic APIs of key-value store, it offers several advanced features, like transaction, snapshot as well.

Persistent Memory Programming 186 Nov 16, 2022
Internal Software Development Kit for Battlefield 2042

battlefield-2042-internal-sdk Internal Software Development Kit for Battlefield 2042 SDK Includes the following: Entity Classes Player Classes Vehicle

Skengdo 11 Nov 29, 2022
🎮 Cross platform development kit for Z80 and SM83 based consoles.

cdk ?? Cross platform development kit for Z80 and SM83 based consoles. Platform We planned to support the following consoles: Nintendo Game Boy Ninten

Micro Console 4 Jan 10, 2022
bl_mcu_sdk is MCU software development kit provided by Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of RISC-V based chips in the future.

bl mcu sdk is an MCU software development kit provided by the Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of chips in the future

Bouffalo Lab 165 Dec 23, 2022
Kit: a magical, high performance programming language, designed for game development

Kit: a magical, high performance programming language, designed for game development

Kit Programming Language 988 Dec 10, 2022