From 27dbeaedcde0fc7833aaf9abfdd806d785f6a121 Mon Sep 17 00:00:00 2001
From: wangyu- <wangyucn@gmail.com>
Date: Mon, 26 Feb 2018 08:09:01 +0800
Subject: [PATCH] Update README.md

---
 README.md | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 65 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 0bf4072..e25267b 100644
--- a/README.md
+++ b/README.md
@@ -75,10 +75,73 @@ Now connecting to UDP port 3333 at the client side is equivalent to connecting t
 
 `-k` enables simple XOR encryption
 
+
 # Improves all traffic with OpenVPN + UDPspeeder
 
 See [UDPspeeder + openvpn config guide](https://github.com/wangyu-/UDPspeeder/wiki/UDPspeeder-openvpn-config-guide).
 
+# Advanced Topic
+
+### Full Options
+```
+UDPspeeder V2
+git version: 6f55b8a2fc    build date: Nov 19 2017 06:11:23
+repository: https://github.com/wangyu-/UDPspeeder
+
+usage:
+    run as client: ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port  [options]
+    run as server: ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port  [options]
+
+common options, must be same on both sides:
+    -k,--key              <string>        key for simple xor encryption. if not set, xor is disabled
+main options:
+    -f,--fec              x:y             forward error correction, send y redundant packets for every x packets
+    --timeout             <number>        how long could a packet be held in queue before doing fec, unit: ms, default: 8ms
+    --report              <number>        turn on send/recv report, and set a period for reporting, unit: s
+advanced options:
+    --mode                <number>        fec-mode,available values: 0,1; mode 0(default) costs less bandwidth,no mtu problem.
+                                          mode 1 usually introduces less latency, but you have to care about mtu.
+    --mtu                 <number>        mtu. for mode 0, the program will split packet to segment smaller than mtu value.
+                                          for mode 1, no packet will be split, the program just check if the mtu is exceed.
+                                          default value: 1250. you typically shouldnt change this value.
+    -q,--queue-len        <number>        fec queue len, only for mode 0, fec will be performed immediately after queue is full.
+                                          default value: 200. 
+    -j,--jitter           <number>        simulated jitter. randomly delay first packet for 0~<number> ms, default value: 0.
+                                          do not use if you dont know what it means.
+    -i,--interval         <number>        scatter each fec group to a interval of <number> ms, to protect burst packet loss.
+                                          default value: 0. do not use if you dont know what it means.
+    --random-drop         <number>        simulate packet loss, unit: 0.01%. default value: 0.
+    --disable-obscure     <number>        disable obscure, to save a bit bandwidth and cpu.
+developer options:
+    --fifo                <string>        use a fifo(named pipe) for sending commands to the running program, so that you
+                                          can change fec encode parameters dynamically, check readme.md in repository for
+                                          supported commands.
+    -j ,--jitter          jmin:jmax       similiar to -j above, but create jitter randomly between jmin and jmax
+    -i,--interval         imin:imax       similiar to -i above, but scatter randomly between imin and imax
+    --decode-buf          <number>        size of buffer of fec decoder,u nit: packet, default: 2000
+    --fix-latency         <number>        try to stabilize latency, only for mode 0
+    --delay-capacity      <number>        max number of delayed packets
+    --disable-fec         <number>        completely disable fec, turn the program into a normal udp tunnel
+    --sock-buf            <number>        buf size for socket, >=10 and <=10240, unit: kbyte, default: 1024
+log and help options:
+    --log-level           <number>        0: never    1: fatal   2: error   3: warn 
+                                          4: info (default)      5: debug   6: trace
+    --log-position                        enable file name, function name, line number in log
+    --disable-color                       disable log color
+    -h,--help                             print this help message
+
+```
+#### `--fifo` option
+Use a fifo(named pipe) for sending commands to the running program. For example `--fifo fifo.file`, you can use following commands to change parameters dynamically:
+```
+echo fec 19:9 > fifo.file
+echo mtu 1100 > fifo.file
+echo timeout 5 > fifo.file
+echo queue-len 100 > fifo.file
+echo mode 0 > fifo.file
+```
+
+
 # wiki
 Check wiki for more info:
 
@@ -86,14 +149,10 @@ https://github.com/wangyu-/UDPspeeder/wiki
 
 # Related repo
 
-You can also try tinyfecVPN, a lightweight high-performance VPN with UDPspeeder's function built-in.
-
-tinyfecVPN's repo:
+You can also try tinyfecVPN, a lightweight high-performance VPN with UDPspeeder's function built-in, repo:
 
 https://github.com/wangyu-/tinyfecVPN
 
-You can use udp2raw with UDPspeeder together to get better speed on some ISP with UDP QoS(UDP throttling).
-
-udp2raw's repoļ¼š
+You can use udp2raw with UDPspeeder together to get better speed on some ISP with UDP QoS(UDP throttling), repo: 
 
 https://github.com/wangyu-/udp2raw-tunnel