Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
inbox:toh:cisco:vedge_1000 [2023/06/23 18:31] – [Debricking] bluecmdinbox:toh:cisco:vedge_1000 [2024/08/11 12:20] – [Installing OpenWrt] bluecmd
Line 4: Line 4:
 {{ media:cisco:vedge1000:vedge-1000-v1_front_viptela.jpg?300|Cisco/Viptela vEdge 1000|}} {{ media:cisco:vedge1000:vedge-1000-v1_front_viptela.jpg?300|Cisco/Viptela vEdge 1000|}}
  
-The Cisco vEdge 1000 is a small form factor SD-WAN appliance previously sold as Viptela vEgde 1000. It is based on the ODM Interface Masters Niagara 821 board. +The Cisco vEdge 1000 is a small form factor SD-WAN appliance previously sold as Viptela vEgde 1000. It is based on the Niagara 821 board by the ODM Interface Masters
  
 /*****/ /*****/
Line 15: Line 15:
 <color red>**WIP**</color> <color red>**WIP**</color>
  
-Currently there is working private openwrt-build not yet ready for public consumption.+Basic plattform support is available in the main branch since https://github.com/openwrt/openwrt/commit/6bf0e7649400f5c25828061d14dd5aa76bfc1211.
  
 +Currently there is a [[https://github.com/sonix-network/openwrt/tree/viptela-vedge1000-for-upstream|private fully-featured OpenWrt port]] pending kernel patch upstreaming before they are submitted to OpenWrt.
 ===== Supporting activities ===== ===== Supporting activities =====
  
-  * OpenWrt forum thread: https://forum.openwrt.org/t/openwrt-support-for-cisco-vedge-100wm/103919 +  * OpenWrt forum thread: https://forum.openwrt.org/t/openwrt-support-for-cisco-vedge-100wm/103919 
 +  * Github PRs: 
 +    * None open right now 
 +  * Commits: 
 +    * https://github.com/openwrt/openwrt/commit/6bf0e7649400f5c25828061d14dd5aa76bfc1211
  
  
Line 25: Line 30:
 ===== Experimental firmware ===== ===== Experimental firmware =====
  
-None at this time.+See https://github.com/sonix-network/openwrt/releases. 
 /*** /***
   * External image (add link)   * External image (add link)
Line 38: Line 44:
  
  
 +USB per-port power switching (PPPS) is available for both USB 3 front ports.
  
 /*** if info available: uncomment and fill in /*** if info available: uncomment and fill in
Line 44: Line 51:
   - → [[docs:guide-user:installation:generic.flashing|Install OpenWrt]]   - → [[docs:guide-user:installation:generic.flashing|Install OpenWrt]]
   - → [[:downloads|Latest OpenWrt release]]   - → [[:downloads|Latest OpenWrt release]]
 +***/
  
 ==== Installing OpenWrt ==== ==== Installing OpenWrt ====
-***/ 
  
 +=== Alternative 1: Boot installation from unlocked u-boot via TFTP ===
 +
 +  * Download the ''openwrt-octeon-generic-cisco_vedge1000-initramfs-kernel.bin'' file somewhere locally and set up a TFTP server serving the file.
 +    * Example TFTP server command to serve the files in the current directory: ''sudo /usr/sbin/in.tftpd -sLv .''
 +  * Calculate the CRC32 of your boot file using the following command: <code>python3 -c 'd = open("openwrt-octeon-generic-cisco_vedge1000-initramfs-kernel.bin", "rb").read(); import binascii; print("crc32 -v 0x20000000 " + hex(len(d)) + " " + hex(binascii.crc32(d))[2:].rjust(8, "0"))'</code>
 +
 +  * If you are not in the u-boot prompt, reboot the device and press **Ctrl-x** to enter u-boot
 +    * If this does not work, see the "Unlock u-boot" section.
 +  * Connect the vEdge 1000 via the management Ethernet port to a network with DHCP available
 +  * Run the following commands, replace the IP with your TFTP server:
 +    * ''setenv ethact octmgmt0; dhcp; setenv serverip 10.1.2.3''
 +    * ''setenv ethact octmgmt0; tftpboot $loadaddr $serverip:/openwrt-octeon-generic-cisco_vedge1000-initramfs-kernel.bin''
 +    * ''crc32 -v 0x20000000 0x?????? ????????'' (use the already prepared CRC32 command from earlier)
 +    * If the previous crc32 command does not complain, continue with the boot
 +    * ''bootoctlinux $loadaddr endbootargs''
 +  * Continue with the **Prepare the disk** step
 +
 +=== Alternative 2: Boot installation from inside OEM OS (USB drive, SD card, SSH, HTTP(S)) ===
 +
 +**Note:** OEM OS only supports mounting vfat partitions automatically
 +
 +  * Copy ''openwrt-octeon-generic-cisco_vedge1000-initramfs-kernel.bin'' to ''/boot/openwrt-install.bin''
 +  * ''touch /boot/in_prod'' to unlock u-boot if required
 +  * Reboot vEdge
 +  * Press ctrl-x to enter u-boot
 +  * Run the following commands:
 +    * ''usb start''
 +    * ''ext2load usb 0:1 $loadaddr openwrt-install.bin''
 +    * ''bootoctlinux $loadaddr endbootargs''
 +  * Continue with the **Prepare the disk** step
 +
 +=== Prepare the disk ===
 +The vEdge 1000 has been found to have a disk ID of zero by default. This needs to be rectified in order for OpenWrt to reliably be able to find the root partition. This step only has to be done once as it is permanent unless the full disk is re-partitioned manually by the user.
 +
 +  * Verify if you need to change the disk ID by running ''blkid -t LABEL=boot''
 +    * You should get a single line like this: ''/dev/sda1: LABEL="boot" UUID="e74e53f8-dbfd-4b1f-8fc9-ba6528c03635" BLOCK_SIZE="4096" TYPE="ext2" PARTUUID="01013160-01"''
 +    * If you are missing the ''PARTUUID'' part, you need to follow the next instruction - otherwise you can skip ahead to the next section.
 +  * Generate a new disk ID by running the following commands:
 +    * <code>
 +source /lib/upgrade/platform.sh
 +sfdisk --disk-id "$(platform_get_n821_disk)" 0x10"${RANDOM}"
 +</code>
 +  * Now loop back to step 1 above and verify that the boot partition has a ''PARTUUID'' property. Then continue with the installation.
 +
 +=== Running the installation ===
 +
 +You need to make the file ''openwrt-octeon-generic-cisco_vedge1000-squashfs-sysupgrade.tar'' available to the installation.
 +
 +**Example using OpenSSH:**
 +
 +<code>
 +udhcpc -i br-lan
 +# On another machine: scp -O openwrt-octeon-generic-cisco_vedge1000-squashfs-sysupgrade.tar root@10.x.x.x:/tmp/
 +sysupgrade -n /tmp/openwrt-octeon-generic-cisco_vedge1000-squashfs-sysupgrade.tar
 +</code>
 +
 +**Example using a USB drive:**
 +
 +<code>
 +mount /dev/sdb1 /mnt
 +sysupgrade -n /mnt/openwrt-octeon-generic-cisco_vedge1000-squashfs-sysupgrade.tar
 +</code>
 +
 +Done! It is recommended to power-cycle the device to ensure that e.g. the LED and USB controllers are reset to a known state.
 +
 +=== Sync and reset fallback partitions ===
 +
 +The vEdge 1000 has support for two U-Boot bootloaders. It is recommended to sync and force a switch to the primary partition.
 +
 +In U-Boot, execute the following:
 +
 +<code>
 +# optional: ensure USB3 ports are enabled
 +setenv ext_usb_setup "i2c dev 1; i2c smbwrite 6e 01 01 ff; cpld_wr 0x4 0x00"
 +
 +cpld_wr 0xa 0x2
 +saveenv
 +cpld_wr 0xa 0x0
 +saveenv
 +reset
 +</code>
 +==== Reverting back to OEM ====
 +
 +<code>
 +source /lib/upgrade/platform.sh
 +mkdir /mnt
 +mount "$(platform_get_n821_disk 1)" /mnt
 +rm /mnt/in_prod
 +umount /mnt
 +reboot
 +</code>
 +
 +In the "Viptela vEdge-1000 Boot Console" interface select ESC to enter recovery mode and select "Reset u-boot environment".
 +The system will restart but fail to boot with a bunch of file system related errors. At this point press the reset button on the front panel for 10 seconds and let go.
 +The system should now boot up correctly in the OEM software
  
 ===== Debricking ===== ===== Debricking =====
Line 130: Line 232:
  
  
----- datatemplatelist dttpllist ---- +<!-- ToH: { 
-templatemeta:template_datatemplatelist_vedge_1000 +  "source""json", 
-cols    BrandModelVersionsDevice TypeAvailabilitySupported Since Commit_gitSupported since RelSupported current RelUnsupportedBootloaderCPUTargetCPU MHzFlash MBsRAM MBEthernet 1Gbit ports_SFP ports_VLAN_Comments network ports_USB ports_SerialJTAGLED countButton countPower supplyDevice Techdata_pageidForum topic URL_urlwikidevi URL_urlFirmware OpenWrt Install URL_urlFirmware OpenWrt Upgrade URL_urlComments_ +  "dom""t", 
-filter  : Brand=Cisco +  "paging"false, 
-filter  Model=vEdge 1000 +  "rotate": true, 
-----+  "shownColumns": ["brand""model""version""devicetype""availability""supportedsincecommit""supportedsincerel""supportedcurrentrel""unsupported_functions""bootloader""cpu""target""cpumhz""flashmb""rammb""ethernet1gports""sfp_ports""vlan""commentsnetworkports""usbports""serial""jtag""ledcount""buttoncount""powersupply""deviceid""owrt_forum_topic_url""wikideviurl", "firmwareopenwrtinstallurl", "firmwareopenwrtupgradeurl", "comments"]
 +  "filterColumns"{"brand": "^Cisco$", "model""^vEdge 1000$"} 
 +-->
  
 /*** if info available: uncomment and fill in /*** if info available: uncomment and fill in
Line 146: Line 250:
 ***/ ***/
  
-The unit is shipped with two power adapters, part number FSP060-DIBAN2. A DC connector w/ the dimensions 2.1×5.5×9.5mm is suitable.+The unit is shipped with two power adapters, part number FSP060-DIBAN2. A DC connector w/ the dimensions 2.1×5.5×9.5mm is suitable. The stock PSU is rated 60W but in reality anything at 30W or higher should work fine. During stress testing the vEdge 1000 has been pushed to draw 28W at worst-case but during normal loads it should be closer to 15-20W. The unit works fine with voltage levels between 6.5V up to 15.2V - higher voltages might be possible but has not been tested.
  
  
Line 211: Line 315:
 <WRAP BOX> <WRAP BOX>
 The serial interface on the front is a standard Cisco RJ45 serial port labelled as "console". It is possible to enter u-boot by interrupting the boot process when prompted to hit ''<nowiki>ctrl-x</nowiki>''. The serial interface on the front is a standard Cisco RJ45 serial port labelled as "console". It is possible to enter u-boot by interrupting the boot process when prompted to hit ''<nowiki>ctrl-x</nowiki>''.
-On newer firmwares this method is not directly accessible and might require additional work.+On newer firmwares this method is not directly accessible and will require additional work, see below.
  
 Alternatively the USB Type-B on the front can be used to connect to the serial console.  Alternatively the USB Type-B on the front can be used to connect to the serial console. 
Line 217: Line 321:
  
 ^ Serial connection parameters\\ for Cisco vEdge 1000 | 115200, 8N1, 3.3V | ^ Serial connection parameters\\ for Cisco vEdge 1000 | 115200, 8N1, 3.3V |
 +
 +
 +=== Unlocking u-boot ===
 +
 +Entering U-boot is achieved by pressing **Ctrl-x** when booting. The prompt is something like this:
 +
 +<code>
 +scanning bus 0 for devices... 2 USB Device(s) found                                                                                                                                                      
 +Type the command 'usb start' to scan for USB storage devices.                                                                                                                                            
 +                                                                                                                                                                                                        
 +(Re)start USB...                                                                                                                                                                                         
 +USB0:   USB EHCI 1.00                                                                                                                                                                                    
 +scanning bus 0 for devices... 2 USB Device(s) found                                                                                                                                                      
 +      scanning usb for storage devices... 1 Storage Device(s) found                                                                                                                                     
 +Hit ctrl-x to stop booting 0                                                                                                                                                                             
 +=>
 +</code>
 +
 +If you instead get presented by a screen that looks like the one in the screenshot below, you need to unlock U-boot before you can install OpenWrt.
 +
 +<code>
 +/------------------------------------------------------------------------------\
 +|                       Viptela vEdge-1000 Boot Console                        |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                             /-------------------\                            |
 +|                             | 18.4.302 (active) |                            |
 +|                             \-------------------/                            |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|        Press <ENTER> to boot image, <ESC> to enter Viptela Recovery          |
 +|           Menu. Press <Up> or <Down> to select different image.              |
 +|                                                                              |
 +\------------------------------------------------------------------------------/
 +</code>
 +
 +The least complicated way to unlock U-boot is to create a file called ''in_prod'' on the first partition on the internal disk, however that requires rooting the OEM software on the device. A bit more complicated, but universal, way to unlock U-boot is to put the device into testbed mode by using an I2C gadget.
 +
 +As part of the secure boot flow U-boot will be searching for an I2C EEPROM at address 0x75 on the JP3 header (see "12B" on the photo of the main board). If the device is found, it will compare the contents of the EEPROM with the string ''Viptela'' and if it matches, enable testbed mode. In testbed mode you have access to utilities like the U-boot console.
 +
 +One straightforward way to create such a gadget is to use an Arduino microcontroller. Documented below is code and connection schematic for using an Arduino Uno controller connected via normal 0.64mm jumper wire. If you have no previous experience nor equipment to build this hardware yourself there are kits available that contain everything you need - example of such a kit is the [[https://www.elegoo.com/products/elegoo-uno-basic-starter-kit|ELEGOO UNO Basic Starter Kit]] 
 +
 +{{ media:cisco:vedge1000:vedge-1000-v1_unlock.jpg?400|}}
 +
 +Use the following code:
 +
 +<code>
 +include <Wire.h>
 + 
 +void setup() {
 +  Wire.begin(0x75);
 +  Wire.setClock(100 * 1000);
 +  Wire.onRequest(requestEvent);
 +  Serial.begin(9600);
 +  Serial.println("Cisco vEdge u-boot testbed unlock");
 +}
 +
 +void requestEvent() {
 +  Wire.write("Viptela");
 +  Serial.println("Processing I2C read ...");
 +}
 + 
 +void loop() {
 +  delay(50);
 +}
 +</code>
 +
 +^ Arduino UNO Pinout ^ Signal ^ To where on JP3 ^
 +| A5 | SDA | left-most on the picture, arrow on the PCB points to this pin |
 +| A4 | SCL | center pin |
 +| GND | GND | right-most on the picture |
 +
 +When booting with this gadget correctly attached you should be greeted with a recovery menu that looks like this:
 +
 +
 +<code>
 +/------------------------------------------------------------------------------\
 +|                       Viptela vEdge-1000 Recovery Tool                       |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|               /-----------------------------------------------\              |
 +|                    Boot Viptela Software (Normal Boot)      |              |
 +|                    Boot Viptela Software (Debug Mode)                    |
 +|               | Clean Install Viptela Software (From SD-Card) |              |
 +|                     Network Install Viptela Software        |              |
 +|                         Reset U-boot Environment            |              |
 +|                      Permanently Enable Testbed Mode        |              |
 +|                              U-boot Console                              |
 +|                                  Reboot                                  |
 +|               \-----------------------------------------------/              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +|                                                                              |
 +\------------------------------------------------------------------------------/
 +</code>
 +
 +You may then choose the option **"Permanently enable testbed mode"** which will reset the U-boot environment and do a ''setenv testbed 1; saveenv'' to activate testbed mode regardless of if the I2C gadget is attached.
 +
 +
  
 ==== JTAG ==== ==== JTAG ====
Line 249: Line 469:
 jtag newtap chip3 tap -irlen 5 -expected-id 0x19300399 -ignore-version jtag newtap chip3 tap -irlen 5 -expected-id 0x19300399 -ignore-version
  
-target create core0 mips_mips64 -chain-position 0 -coreid 0 +target create core0 mips_mips64 -endian big -chain-position 0 -coreid 0 
-target create core1 mips_mips64 -chain-position 1 -coreid 1 +target create core1 mips_mips64 -endian big -chain-position 1 -coreid 1 
-target create core2 mips_mips64 -chain-position 2 -coreid 2 +target create core2 mips_mips64 -endian big -chain-position 2 -coreid 2 
-target create core3 mips_mips64 -chain-position 3 -coreid 3+target create core3 mips_mips64 -endian big -chain-position 3 -coreid 3
  
 target smp core0 core1 core2 core3 target smp core0 core1 core2 core3
Line 749: Line 969:
 ===== Notes ===== ===== Notes =====
  
 +==== USB power switching ====
 +
 +To power down the top port you can do:
 +
 +<code>
 +echo 1 > /sys/devices/pci0000:01/0000:01:00.0/usb3/3-0:1.0/usb3-port2/disable
 +echo 1 > /sys/devices/pci0000:01/0000:01:00.0/usb4/4-0:1.0/usb4-port2/disable
 +</code>
 +
 +For the bottom port use ''usb3-port1'' and ''usb4-port1''. Both ports need to be disabled due to USB 3.0/2.x duality. Enable the port by writing 0 in the same fashion.
 +
 +The software uhubctl can be used, but as of this writing there are some issues regarding endianness and devices hanging around in the kernel even when being powered down.
 +
 +==== Gotchas ====
 +
 +=== Trying to up an interface fails ===
 +
 +<code>
 +root@OpenWrt:/# ip link set up dev lan5
 +RTNETLINK answers: No error information
 +</code>
 +
 +This will happen if the port is configured for SGMII and did not have a PHY inserted at boot time. Reboot the unit and it should be able to up the link.
 +
 +=== Kernel panic - not syncing: ������ ===
 +
 +This message with broken glyphs can occur if you enable CONFIG_TARGET_INITRAMFS_COMPRESSION. Maybe the support is broken for MIPS64, or maybe it is broken for just this platform.
 +
 +=== Crash when loading kernel after "Allocating memory for ELF segment:" ===
 +
 +This error can happen if the initramfs image is too large. Images larger than 256 MiB seems to be unbootable.
 +
 +Example log:
 +
 +<code>
 +Bytes transferred = 432629896 (19c96888 hex)
 +=> bootoctlinux $loadaddr endbootargs
 +argv[2]: endbootargs
 +Allocating memory for ELF segment: addr: 0xffffffff81100000 (adjusted to: 0x1100000), size 0x19ea1360
 +
 +Reg: 0x0 0x0
 +Reg: 0x1 0x0
 +Reg: 0x2 0x30000000
 +Reg: 0x3 0xD1D2D3D4D5D6D7DC
 +Reg: 0x4 0x19EA1360
 +Reg: 0x5 0xD1D2D3D4D5D6D7DC
 +Reg: 0x6 0x1100000
 +Reg: 0x7 0x8000000000000000
 +Reg: 0x8 0x6C108
 +Reg: 0x9 0xFFFFFFFFFFFFFFF0
 +Reg: 0xA 0x30000000
 +Reg: 0xB 0xD1D2D3D4D5D6D7E4
 +Reg: 0xC 0xDEDF00000000003C
 +Reg: 0xD 0xDEDF00003000003C
 +Reg: 0xE 0x800000000006C110
 +Reg: 0xF 0x1
 +Reg: 0x10 0x1AFA1360
 +Reg: 0x11 0xF
 +Reg: 0x12 0x0
 +Reg: 0x13 0x19EA1360
 +Reg: 0x14 0x0
 +Reg: 0x15 0x1100000
 +Reg: 0x16 0x0
 +Reg: 0x17 0x1100000
 +Reg: 0x18 0xFFFFFFFFC00F0180
 +Reg: 0x19 0xFFFFFFFFC0001BC0
 +Reg: 0x1A 0xFFFFFFFFFFFF97F8
 +Reg: 0x1B 0xFFFFFFFFFFFF97F8
 +Reg: 0x1C 0xFFFFFFFFC00CD3C0
 +Reg: 0x1D 0xFFFFFFFFC0FAF7B0
 +Reg: 0x1E 0x0
 +Reg: 0x1F 0xFFFFFFFFC0001D1C
 +status:    0x505000E6
 +cause:  0x40008010 (Address error exception (load or inst fetch))
 +epc:    0xFFFFFFFFC0001DEC
 +badvaddr:       0xD1D2D3D4D5D6D7E4
 +instruction: 0xDD6C0000
 +
 +stack:     0xFFFFFFFFC0FAF7B0
 +0xFFFFFFFFC0FAF6B0 : 0xFFFFFFFFC012AB98 0xFFFFFFFFC03A1A88
 +0xFFFFFFFFC0FAF6C0 : 0x5F5F746D705F7265 0x7365727665645F6C
 +0xFFFFFFFFC0FAF6D0 : 0x696E757800000000 0x536B697070696E67
 +0xFFFFFFFFC0FAF6E0 : 0x206E6F6E204C4F41 0x442070726F677261
 +0xFFFFFFFFC0FAF6F0 : 0x6D20686561646572 0x2028747970652030
 +</code>
 ===== Tags ===== ===== Tags =====
  
 {{tag>U-boot octeon 4core MIPS64 SFP GigabitEthernet 9Port VLAN 4096RAM USB3.0 Serial 2serial 1button fan RTC rackmount 12v_powered dual_firmware jtag}} {{tag>U-boot octeon 4core MIPS64 SFP GigabitEthernet 9Port VLAN 4096RAM USB3.0 Serial 2serial 1button fan RTC rackmount 12v_powered dual_firmware jtag}}
  • Last modified: 2024/09/02 20:29
  • by bluecmd