{"id":20832930,"url":"https://github.com/udhos/nepim","last_synced_at":"2025-07-30T03:37:47.614Z","repository":{"id":19198479,"uuid":"22431859","full_name":"udhos/nepim","owner":"udhos","description":"nepim stands for network pipemeter, a tool for measuring available bandwidth between hosts.","archived":false,"fork":false,"pushed_at":"2016-12-05T17:41:09.000Z","size":88,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-12T08:44:36.088Z","etag":null,"topics":["benchmarking","c","networking","performance-testing","tcp","tool","udp"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/udhos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-07-30T14:46:37.000Z","updated_at":"2021-10-28T09:52:19.000Z","dependencies_parsed_at":"2022-08-05T02:30:29.636Z","dependency_job_id":null,"html_url":"https://github.com/udhos/nepim","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/udhos/nepim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udhos%2Fnepim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udhos%2Fnepim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udhos%2Fnepim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udhos%2Fnepim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/udhos","download_url":"https://codeload.github.com/udhos/nepim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udhos%2Fnepim/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263743179,"owners_count":23504612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmarking","c","networking","performance-testing","tcp","tool","udp"],"created_at":"2024-11-18T00:13:43.092Z","updated_at":"2025-07-05T12:36:42.053Z","avatar_url":"https://github.com/udhos.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"INTRODUCTION\n============\n\n        nepim stands for network pipemeter, a tool for measuring\n        available bandwidth between hosts. nepim is also useful to\n        generate network traffic for testing purposes.\n\n        nepim operates in client/server mode, is able to handle\n        multiple parallel traffic streams, reports periodic partial\n        statistics along the testing, accepts rich tuning from\n\tcommand-line, supports multicast and IPv6.\n\nLICENSE\n=======\n\n        nepim - network pipemeter\n        Copyright (C) 2005 Everton da Silva Marques\n\n        nepim is free software; you can redistribute it and/or modify\n        it under the terms of the GNU General Public License as\n        published by the Free Software Foundation; either version 2,\n        or (at your option) any later version.\n\n        nepim is distributed in the hope that it will be useful, but\n        WITHOUT ANY WARRANTY; without even the implied warranty of\n        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n        GNU General Public License for more details.\n\n        You should have received a copy of the GNU General Public\n        License along with nepim; see the file COPYING.  If not, write\n        to the Free Software Foundation, Inc., 59 Temple Place - Suite\n        330, Boston, MA 02111-1307, USA.\n\nHOME\n====\n        nepim lives at https://github.com/udhos/nepim\n\nREQUIREMENTS\n============\n\n        nepim depends on Liboop (1.0 or higher), available at:\n\n        http://download.ofb.net/liboop/\n\n        http://directory.fsf.org/libs/c/liboop.html\n\n        http://ftp.debian.org/debian/pool/main/libo/liboop/liboop_1.0.orig.tar.gz\n\n        http://liboop.org/\n\nBUILDING\n========\n\n        nepim has been tested under Linux, Solaris and FreeBSD, though\n        it should work under other platforms as well. If you manage to\n        build nepim for different systems, please send the patch.\n\n        Before compiling nepim, install Liboop on your system.\n\n        Then type:\n\n        $ cd src\n        $ make\n\n        If you have Liboop installed on a special location, pass it to\n        the make, as in the following example:\n\n        $ cd src\n        $ make OOP_BASE=/usr/local/oop\n\n        Afterwards copy the 'nepim' binary to your system's proper\n        filesystem location. For instance:\n\n        $ cp nepim /usr/local/bin\n\n        If you face trouble compiling, try tweaking the\n        Makefile. Otherwise, post your problem at nepim support site.\n\n\t--\n\n\t* Tip for building with 64-bit Solaris:\n\n\t# 1. Use Solaris' 64-bit libraries\n\tlib64=/usr/local/lib/sparcv9\n\n\t# 2. Decide where 64-bit Liboop will lie\n\tliboop=$lib64/oop\n\n\t# 3. When building Liboop:\n\t#    Configure Liboop to link against 64-bit libraries\n\tCFLAGS=\"-m64 -mcpu=v9\" LDFLAGS=-R$lib64 ./configure --prefix=$liboop\n\n\t# 4. When building nepim:\n\t#    Simply pass the Liboop base location to make\n\tmake build OOP_BASE=$liboop\n\nBASIC USAGE\n===========\n\n        Starting the server:\n\n        $ nepim\n\n        Starting the client against one server located at 10.10.10.10:\n\n        $ nepim -c 10.10.10.10 -d\n\n        Display brief help about command line options:\n\n        $ nepim -h\n\nEXAMPLE\n=======\n\n        Running nepim in server mode at the server host:\n\n\tserver$ nepim\n\tnepim - network pipemeter - version 0.27\n\tserver: tcp_read=32768 tcp_write=32768 udp_read=4096 udp_write=4096\n\t3: TCP socket listening on ::,1234\n\tsock.c: nepim_create_socket: bind(4,0.0.0.0,1234): errno=98: Address already in use\n\tserver.c spawn_tcp_listener: TCP listener socket failed for 0.0.0.0,1234: -3\n\t4: UDP socket listening on ::,1234\n\t4: pmtud_mode=1 path_mtu=-11 mss=-19 tos=0 ttl=64 mcast_ttl=1 win_recv=109568 win_send=109568 sock_ka=0 nodelay=-10\n\t5: UDP socket listening on 0.0.0.0,1234\n\t5: pmtud_mode=1 path_mtu=-11 mss=-19 tos=0 ttl=64 mcast_ttl=1 win_recv=109568 win_send=109568 sock_ka=0 nodelay=-10\n\tnepim: server ready\n\n        Running nepim in client mode at the client host:\n\n\tclient$ nepim -c localhost -d -r 100000\n\tnepim - network pipemeter - version 0.27\n\tclient: tcp_read=32768 tcp_write=32768\n\tnot a UNIX domain path: localhost: errno=2: No such file or directory\n\tTCP socket solving localhost,1234\n\tTCP socket trying 127.0.0.1,1234\n\tDEBUG FIXME sock.c nepim_connect_client_socket slow synchronous connect\n\t3: TCP socket connected to 127.0.0.1,1234\n\t3: sending: hello server_send=1 bit_rate=100000 pkt_rate=-1 stat_interval=2 test_duration=10 write_delay=250000 server_ka_send=0 server_ka_req=0 seed=0xd4d2e835 verify_data=0 random_fill=1 fill_byte=0x00 pause_duration=0 sock_ka=1 nagle=-1 overhead=0 password=\n\t3: greetings sent to 127.0.0.1,1234\n\t3: pmtud_mode=1 path_mtu=16436 mss=16383 tos=0 ttl=64 mcast_ttl=1 win_recv=87856 win_send=50568 sock_ka=1 nodelay=0\n\t                  kbps_in   kbps_out    rcv/s    snd/s\n\t  3  prt     8     100.00     100.00     4.00     4.00\n\t  3  prt     6     100.00     100.00     4.00     4.00\n\t  3  prt     4     100.00     100.00     4.00     4.00\n\t  3  prt     2     100.00     100.00     4.00     4.00\n\t  3  avg     0     100.00     100.00     4.00     4.00\n\t3: pmtud_mode=1 path_mtu=16436 mss=16384 tos=0 ttl=64 mcast_ttl=1 win_recv=87856 win_send=50568 sock_ka=1 nodelay=0\n\tnepim: no event sink registered\n\tnepim: done\n\nUSAGE HINTS\n===========\n\n        * nepim is useful to assess the throughput at the transport\n        layer (TCP or UDP) as seen by applications.\n\n        * nepim runs single-threaded and should impose very light\n        burden on your CPU. Unless, of course, your testing hosts have\n        relatively high network bandwidth compared to low CPU power.\n\n\t* The client/server interaction is friendly to clients hosted\n\tbehind Dynamic NAT or stateful firewalls: to build a\n\tconnection, the client needs to reach only one transport-layer\n\tport on the server; test options are negotiated in the\n\tbeginning of that single data connection; there is not any\n\tcontrol connection.\n\n\t* Test duration defaults to 10 seconds. The \"-a\" client option\n\tcan supply a distinct duration. Releases higher than 0.31\n\trecognize some time suffixes: m=minute, h=hour, d=day. For\n\tinstance:\n\n\tUp to 0.31\t\t\tHigher than 0.31\n\t--------------------------\t------------------------\n\tnepim -c 10.0.0.1 -a 120\tnepim -c 10.0.0.1 -a 2m\n\tnepim -c 10.0.0.1 -a 3600\tnepim -c 10.0.0.1 -a 1h\n\tnepim -c 10.0.0.1 -a 43200\tnepim -c 10.0.0.1 -a .5d\n\n        * One single server can service multiple clients\n\tsimultaneously.\n\n        * As of nepim 0.11, one single client can interact\n        simultaneously with multiple servers. For instance, suppose\n        you want to test, from a single client, two remote servers,\n        one located at 10.0.0.1,2000 and another at 192.168.0.1,3000:\n\n                nepim -c 10.0.0.1,2000 -c 192.168.0.1,3000\n\n        * The server listens to both TCP and UDP sockets. The client\n        by default uses TCP sockets. Use the \"-u\" client option to\n        switch the client operation to UDP.\n\n        * By default, only the server sends traffic towards the\n        client. Use the \"-s\" client option to reverse the behavior,\n        then only the client will send traffic. Use the \"-d\" client\n        option to make both client and server to send traffic.\n\n\t* Starting from nepim 0.32, options -r,-R,-e accept\n\tmultiplicative suffixes and floating point rates. Examples:\n\n\t-r .25g   = 250,000,000 bps\n\t-r .1m    =     100,000 bps\n\t-R .02k   =          20 pps\n\n        * Use the \"-r\" client option to establish an upper bit rate\n        limit. Without a rate limiting option, nepim sends as fast as\n        possible. See also \"-R\" below. Please notice the rate is\n        specified in bps (bits per second); for instance, the\n        following example states a rate limit of 100,000 bps (100\n        Kbps):\n\n                nepim -c 10.0.0.1 -r 100000\n\n        * Use the \"-R\" client option to establish an upper \"packet\"\n        rate limit (outbound rate limit for transport layer\n        segments). Without a rate limiting option, nepim sends as fast\n        as possible. If both \"-r\" and \"-R\" are given, nepim limits the\n        sending rate at the lower of those bounds.\n\n\t* The options \"-r\" and \"-R\" try to send some packets whenever\n\ta constant period is reached. The default period can be\n\tchanged with the \"-D\" client option, in microseconds. \"-D\" is\n\tmeaningful only when specified before \"-r\" or \"-R\". Example:\n\n\t\tnepim -c 10.0.0.1 -D 100000 -R 20\n\n\t* The \"-e send-rate\" client option tries to generate a\n\tconstant data rate with segments sent at regular intervals. It\n\tshould not be combined with \"-D\", \"-r\" or \"-R\", and might be\n\tprocessor-intensive. Example for 10 segments per second:\n\n\t\tnepim -c 10.0.0.1 -e 10\n\n        * Use the \"-n\" client option to run multiple parallel traffic\n        streams.\n\n        * Use the \"-b\" server option to make the server to listen on\n        specific local addresses.\n\n        * Use the \"-6\" option to disable IPv6 support.\n\n        * Use the \"-4\" option to disable IPv4 support.\n\n        * Multicast support is special. Use the \"-j\" server switch to\n        join a multicast group, then specify the \"-M\" client switch to\n        enable multicast-compatible options. Example:\n\n                server$ nepim -j ff01::1111\n\n                client$ nepim -M -c ff01::1111 -r 100000\n\n\t* Use the \"-j source+group\" syntax to join an Source-Specific\n\tMulticast (source,group) pair. Examples:\n\n\t\tserver$ nepim -j fe80::1+ff01::1111\n\n\t\tserver$ nepim -j 10.10.10.10+232.1.1.1,2000\n\n\t* In the \"-j\" option, append \"@interface\" to group in order to\n\tspecify an interface. Examples:\n\n                server$ nepim -j 239.1.1.1@eth0             ;# by name\n\n                server$ nepim -j 1.1.1.1+232.1.1.1@10.0.0.1 ;# by address\n\n                server$ nepim -j 239.1.1.1@1                ;# by index\n\n        \tserver$ nepim -j ::1+ff01::1111@eth1        ;# by name\n\n\t\tserver$ nepim -j ::1+ff01::1111@2           ;# by index\n\n        * The \"-k\" switch provides a simple password mechanism for\n        client authentication. Just use the same password at both\n        sides:\n\n                server$ nepim -k 321\n\n                client$ nepim -k 321 -c server-hostname\n\n\t* One can specify the \"-F\" switch to force sending out UDP\n\tpackets regardless of a remote server.\n\n\t\tclient$ nepim -F -c 1.1.1.1 -r 100000\n\n\t* The \"-F\" switch accepts suboption 'a' for randomizing\n\tdestination address, or 'p' for randomizing destination port.\n\n\t\tExample for randomizing both address and port:\n\n\t\tclient$ nepim -Fap -R 10\n\n\t\tExample for randomizing IPv6 address and port:\n\n\t\tclient$ nepim -c ::1 -Fap -R 10\n\n\t* The \"-U\" option makes the server to listen on UNIX-domain\n\tstream sockets. See the example below.\n\n\t\tserver$ nepim -U /tmp/sock1\n\n\t\tclient$ nepim -c /tmp/sock1\n\n\t* By default, nepim uses only transport payload data to\n\tcompute incoming/outgoing rates. Such behavior is reasonable\n\tfor large packets (as in the standard 1500 bytes MTU for\n\tEthernet interfaces) since the encapsulation headers remain\n\tcomparatively small. However, as packets become smaller, the\n\teffect of encapsulation on transfer rates grows. The \"-o\"\n\tclient option can be used to circumvent gross rate computation\n\terrors caused by excessive per-packet encapsulation\n\toverhead. The example below shows how the \"-o\" client option\n\tshould be used to specify a per-packet overhead of 28 bytes,\n\tfor UDP payloads of 100 bytes.\n\n\t\tserver$ nepim -W 100\n\n\t\tclient$ nepim -u -W 100 -d -r 100000 -c 10.10.10.10 -o 28\n\n\tNotes:\n\n\t1. The \"-o\" switch remains untested for TCP segments.\n\n\t2. It is probably incorrect to specify \"-o\" with the default\n           large UDP write size, which typically causes local\n           fragmentation. Thus, in order to use the \"-o\" option, it\n           is advisable to choose a payload size which would surely\n           fit the UDP segment entirely into a single MTU. For\n           instance, with a 1500-byte MTU, 1400 would likely suffice:\n\n\t\tserver$ nepim -W 1400\n\n\t\tclient$ nepim -u -W 1400 -d -r 100000 -c 10.10.10.10 -o\n\n\t* The \"-sweep low,high,step\" client option cycles the write\n\tsize (segment payload) from \"low\" to \"high\" with a increment\n\tof \"step\". \"Low\" must be lower than \"high\". If low=auto, \"low\"\n\treceives the minimum possible value. If high=auto, \"high\"\n\treceives the maximum possible value. If \"step\" is negative,\n\tthe scan moves from \"high\" to \"low\". If step=random, the write\n\tsize is random. Examples:\n\n\t\tclient$ nepim -d -c 10.0.0.2 -R 5 -sweep 20,1400,10\n\n\t\tclient$ nepim -d -c 10.0.0.2 -e 1 -sweep auto,auto,random\n\nEND\n===\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudhos%2Fnepim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fudhos%2Fnepim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudhos%2Fnepim/lists"}