Update README.md
[oweals/nmrpflash.git] / README.md
index 132fb75ba54942d1526ba5d8273bfeaee910fa19..21e02f36bc1e06c9e67a800645a5fc98d91eb374 100644 (file)
--- a/README.md
+++ b/README.md
@@ -10,24 +10,26 @@ Prebuilt binaries for Linux, OS X and Windows are available
 [here](https://github.com/jclehner/nmrpflash/releases)
 ([WinPcap](https://www.winpcap.org/install/default.htm) is required on Windows).
 
-````
+```
 Usage: nmrpflash [OPTIONS...]
 
-Options (-a, -i and -f are mandatory):
+Options (-a, -i and -f and/or -c are mandatory):
  -a <ipaddr>     IP address to assign to target device
+ -c <command>    Command to run before (or instead of) TFTP upload
  -f <firmware>   Firmware file
+ -F <filename>   Remote filename to use during TFTP upload
  -i <interface>  Network interface directly connected to device
  -m <mac>        MAC address of target device (xx:xx:xx:xx:xx:xx)
  -M <netmask>    Subnet mask to assign to target device
  -t <timeout>    Timeout (in milliseconds) for regular messages
- -T <timeout>    Time to wait after successfull TFTP upload
+ -T <timeout>    Time (seconds) to wait after successfull TFTP upload
  -p <port>       Port to use for TFTP upload
- -U              Test TFTP upload
+ -R <region>     Set device region (NA, WW, GR, PR, RU, BZ, IN, KO, JP)
  -v              Be verbose
  -V              Print version and exit
  -L              List network interfaces
  -h              Show this screen
-````
+```
 
 ### Using nmrpflash
 
@@ -40,33 +42,53 @@ First, we have to assign a static IP address to our network interface.
 In this example, we'll use `192.168.1.2`. All available network interfaces
 can be listed using
 
-````
-$ nmrpflash -L
+```
+# nmrpflash -L
 eth0      192.168.1.2  f2:11:a1:02:03:b1
-````
+```
 
-Now we can `nmrpflash`. The argument for the `-a` option needs
+Now we can flash the image. The argument for the `-a` option needs
 to be a *free* IP address from the same subnet as the one used by your
-network interface. We'll use `192.168.1.254`. Firmware images can usually 
-be downloaded directly from netgear. For details on how to do this, see
+network interface; we'll use `192.168.1.254`. Firmware images can usually 
+be downloaded directly from Netgear. For details on how to do this, see
 [here](#obtaining-firmware-images). Power on your device immediately 
 after starting `nmrpflash`.
 
-````
-$ nmrpflash -i eth0 -a 192.168.1.254 -f EX2700-V1.0.1.8.img
+```
+# nmrpflash -i eth0 -a 192.168.1.254 -f EX2700-V1.0.1.8.img
 Advertising NMRP server on eth0 ... /
 Received configuration request from a4:2b:8c:00:00:01.
 Sending configuration: ip 192.168.1.254, mask 255.255.255.0.
+Received upload request: filename 'firmware'.
 Uploading EX2700-V1.0.1.8.img ... OK
 Waiting for remote to respond.
 Remote finished. Closing connection.
-````
+Reboot your device now.
+```
 
 ### Common issues
+
+In any case, run `nmrpflash` with `-vvv` before filing a bug report.
+
+###### "Error while loading shared libraries: libpcap.so.0.8" (Linux)
+
+You must install your Linux distribution's `libpcap` package. In
+openSUSE 42 for example, install `libpcap0.8` (cheers to
+[@gvcastellon](https://github.com/gvcastellon).
+
+###### "The program can't start because wpcap.dll is missing" (Windows)
+
+Install [WinPcap](https://www.winpcap.org/install/default.htm).
+
 ###### "No suitable network interfaces found."
 
-If you're *not* on Windows, rerun `nmrpflash -L` using `sudo`. In any case,
-use `-vvvL` to see more detailed messages, and file a bug report if applicable.
+Make sure the network interface is up. Wireless interfaces are not supported.
+On Windows, try rebooting the WinPcap service (commands must be run as administrator):
+
+```
+C:\> net stop npf
+C:\> net start npf
+```
 
 ###### "No response after 60 seconds. Bailing out."
 
@@ -74,6 +96,27 @@ The router did not respond. Try rebooting the device and run `nmrpflash` again.
 You could also try running `nmrpflash` with `-m` and specify your router's
 MAC address. It's also possible that your device does not support the NMRP protocol.
 
+###### "Timeout while waiting for initial reply."
+
+The device did not respond to `nmrpflash`'s TFTP upload request. This could indicate a bug
+in the TFTP code; try using an external tftp client (busybox in this example), by specifying
+the `-c` flag instead of the `-f` flag:
+
+`# nmrpflash -i eth0 -a 192.168.1.254 -c "busybox tftp -p -l EX2700-V1.0.1.8.img 192.168.1.254"`
+
+<strike>
+If the upload still fails, and you're on Windows, try executing the following command before
+running `nmrpflash`:
+
+`C:\> netsh interface ip add neighbors <interface> <ip> <mac>`
+
+where `<interface>` is the pretty interface name (e.g. "Local Area Connection"; as displayed by
+`nmrpflash -L`), `<ip>` is the same IP address you'd use for `nmrpflash`'s `-a` flag, and `<mac>`
+is the target device's mac address.
+
+Cheers to [@ntadmin](https://github.com/ntadmin) for this info!
+</strike>
+
 ###### "Timeout while waiting for CLOSE_REQ."
 
 After a successful file upload, `nmrpflash` waits for up to 120 seconds for an
@@ -101,7 +144,7 @@ disabled.
 An alternative would be to add `-c 'ifconfig <interface> <ip>'` to the command line,
 for example:
 
-`nmrpflash -i eth0 -a 192.168.1.1 -f firmware.bin -c 'ifconfig eth0 192.168.1.2'`
+`nmrpflash -i eth0 -a 192.168.1.1 -f firmware.bin -c 'ifconfig eth0 192.168.1.2'`
 
 This will execute the command specified by `-c` prior to starting the TFTP upload (in
 this case setting the IP address to 192.168.1.2).
@@ -109,9 +152,9 @@ this case setting the IP address to 192.168.1.2).
 ### Building and installing
 ###### Linux, Mac OS X, BSDs
 
-````
+```
 $ make && sudo make install
-````
+```
 
 ###### Windows