Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 17 additions & 86 deletions _ont/ont-huawei-ma5671a-rooted.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,96 +12,27 @@ layout: default
## Web procedure


1. Get `sfp_a2_info` and paste into the form

<form id="huawei-rooted">
<div class="form-floating mb-3">
<input type="text" class="form-control" placeholder="sfp_a2_info input" name="sfp-a2-info" id="sfp-a2-info" >
<label for="sfp-a2-info">sfp_a2_info input</label>
</div>
<div class="form-floating mb-3">
<input type="text" class="form-control" placeholder="GPON S/N" name="gpon-sn" id="gpon-sn" value="" pattern="([A-Z]{4}[0-9A-Za-z]{8})|([0-9A-F]{8}[0-9A-Za-z]{8})">
<label for="gpon-sn">GPON S/N in format GPON12345678 or 47504F4E12345678, empty for not modify it</label>
</div>
<div class="form-floating mb-3">
<input type="text" class="form-control" placeholder="GPON Ploam Password" name="gpon-password" id="gpon-password" value="" maxlength="22">
<label for="gpon-password">GPON S/N in format 1234567890, 31323334353637383930 or 0x31323334353637383930, empty for not modify it</label>
</div>
<div class="form-floating mb-3">
<input type="text" class="form-control" placeholder="MAC address" name="mac-addr" id="mac-addr" value="" pattern="[0-9A-Fa-f]{2}[:-]?[0-9A-Fa-f]{2}[:-]?[0-9A-Fa-f]{2}[:-]?[0-9A-Fa-f]{2}[:-]?[0-9A-Fa-f]{2}[:-]?[0-9A-Fa-f]{2}">
<label for="mac-addr">MAC Address in format 48:57:02:da:be:ef, 48-57-02-da-be-ef or 485702dabeef, empty for not modify it</label>
</div>
<div class="mb-3">
<input type="submit" class="btn btn-primary" value="Calculate!">
</div>
<div class="form-floating mb-3">
<input readonly class="form-control" type="text" id="result" placeholder="sfp_a2_info result">
<label for="result">sfp_a2_info result</label>
</div>
</form>
<script>
var form = document.getElementById('huawei-rooted');
form.addEventListener('submit',(event) => {
event.preventDefault();
var fomrdata = new FormData(form);
var sfp_a2_info = fomrdata.get('sfp-a2-info');
var sfp_a2_info_arr = sfp_a2_info.split('@');
if(sfp_a2_info_arr.length > 10 && sfp_a2_info_arr[0] === 'begin-base64 644 sfp_a2_info ') {
var gpon_sn = fomrdata.get('gpon-sn');
if(gpon_sn.length == 12) {
var vendor_id = gpon_sn.substring(0, 4);
var progressive = gpon_sn.substring(4);
var vendor_id_hex = ([...vendor_id].map((elem, n) => Number(vendor_id.charCodeAt(n)).toString(16)).join(''));
gpon_sn = vendor_id_hex+progressive;
}
if(gpon_sn.length == 16) {
var hex = base64ToHex(sfp_a2_info_arr[6]);
hex = hex.substring(0,16) + gpon_sn + hex.substring(32);
sfp_a2_info_arr[6] = hexToBase64(hex);
}
var gpon_password = fomrdata.get('gpon-password');
if(gpon_password.length > 0) {
if(gpon_password.length <= 10) {
gpon_password = ([...gpon_password].map((elem, n) => Number(gpon_password.charCodeAt(n)).toString(16)).join(''));
gpon_password += '0'.repeat(20-gpon_password.length);
}
else if(gpon_password.length == 22 && gpon_password.substring(0,2) === '0x') {
gpon_password = gpon_password.substring(3);
}
if(gpon_password.length == 20) {
var hex = base64ToHex(sfp_a2_info_arr[5]);
hex = hex.substring(0,22) + gpon_password + hex.substring(42);
sfp_a2_info_arr[5] = hexToBase64(hex);
}
}
var mac_addr = fomrdata.get('mac-addr');
if(mac_addr.length == 17) {
mac_addr = mac_addr.replace('-','');
mac_addr = mac_addr.replace(':','');
}
if(mac_addr.length == 12) {
var hex = base64ToHex(sfp_a2_info_arr[9]);
hex = hex.substring(0,48) + mac_addr + hex.substring(61);
sfp_a2_info_arr[9] = hexToBase64(hex);
}
document.getElementById('result').value = sfp_a2_info_arr.join('@');
} else {
document.getElementById('result').value = 'sfp_a2_info variable in wrong format!';
}
});
function hexToBase64(hexStr) {
return btoa([...hexStr].reduce((acc, _, i) => acc += !(i - 1 & 1) ? String.fromCharCode(parseInt(hexStr.substring(i - 1, i + 1), 16)) : '', ''));
}
function base64ToHex(base64Value) {
return [...atob(base64Value)].map(c=> c.charCodeAt(0).toString(16).padStart(2,0)).join('');
}
</script>
1. Get `fw_printenv sfp_a2_info` and paste into the form

<div id="app">
<vue-lantiq-eeprom type='eeprom-rooted-edit'></vue-lantiq-eeprom>
</div>
<script src="https://unpkg.com/vue@latest"></script>
<script src="https://cdn.jsdelivr.net/npm/vue3-sfc-loader"></script>
<script src="/assets/js/vue-eeprom.js"></script>

{% include alert.html content="Executing these commands requires a minimum of familiarity with `vim`. If you do not know `vim`, follow the commands precisely." alert="Danger" icon="svg-warning" color="red" %}

{:style="counter-reset:none"}
2. Transfer modified file back into variable `sfp_a2_info`, replace `<output>` with the output of web form.
1. Copy the script's output to the clipboard
1. Run the comman `vim /tmp/sfp_a2.txt` in the stick
1. Press the right mouse button in the terminal or `CTRL`+`V`
1. Press `ESC` command from keyboard
1. Type `:wq`
1. Run:

```shell
fw_setenv sfp_a2_info "<output>"
fw_setenv sfp_a2_info ($cat /tmp/sfp_a2.txt)
```

## Temporary file procedure
Expand Down
17 changes: 17 additions & 0 deletions _tools/ont-lantiq-print-eeprom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Lantiq Print EEPROM
has_children: false
layout: default
---

1. Get `sfp_a0_low_128` or `sfp_a2_info` and paste into the form


<div id="app">
<vue-lantiq-eeprom type='eeprom-print'></vue-lantiq-eeprom>
</div>
<script src="https://unpkg.com/vue@latest"></script>
<script src="https://cdn.jsdelivr.net/npm/vue3-sfc-loader"></script>
<script src="/assets/js/vue-eeprom.js"></script>

{% include alert.html content="For more information, see the SFF-8472 Rev 10.2 specification." alert="Info" icon="svg-info" color="blue" %}
28 changes: 28 additions & 0 deletions assets/js/vue-eeprom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const { createApp } = Vue;
const { loadModule } = window['vue3-sfc-loader'];
const options = {
moduleCache: {
vue: Vue,
},
getFile(url) {
return fetch(url).then((resp) =>
resp.ok ? resp.text() : Promise.reject(resp)
);
},
addStyle(styleStr) {
const style = document.createElement('style');
style.textContent = styleStr;
const ref = document.head.getElementsByTagName('style')[0] || null;
document.head.insertBefore(style, ref);
},
log(type, ...args) {
console.log(type, ...args);
},
};
const app = createApp({
components: {
VueLantiqEeprom: Vue.defineAsyncComponent(() =>
loadModule('/assets/js/vue/vue-lantiq-eeprom.vue', options)
),
},
}).mount('#app');
Loading