mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-11-02 19:37:51 +00:00 
			
		
		
		
	Compare commits
	
		
			22 Commits
		
	
	
		
			uci_defaul
			...
			v4.1.0-rc3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7dd139cf3b | ||
| 
						 | 
					544b687f46 | ||
| 
						 | 
					c27b015a63 | ||
| 
						 | 
					02c2e6945b | ||
| 
						 | 
					e7cd5038ac | ||
| 
						 | 
					34e4a01e25 | ||
| 
						 | 
					60e9fb2645 | ||
| 
						 | 
					462ff4f813 | ||
| 
						 | 
					71b738f8ee | ||
| 
						 | 
					b995833a03 | ||
| 
						 | 
					9866d4a86e | ||
| 
						 | 
					4ad04c7948 | ||
| 
						 | 
					143d4e3b58 | ||
| 
						 | 
					0735fd8c9a | ||
| 
						 | 
					c7f9061eee | ||
| 
						 | 
					f4a58c0989 | ||
| 
						 | 
					cd78a832e3 | ||
| 
						 | 
					7b6fc736f6 | ||
| 
						 | 
					f997f8dff0 | ||
| 
						 | 
					c4b3eeed81 | ||
| 
						 | 
					b2ba9d7c1b | ||
| 
						 | 
					b982f3f4c2 | 
@@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					--- a/include/init/ssdk_plat.h
 | 
				
			||||||
 | 
					+++ b/include/init/ssdk_plat.h
 | 
				
			||||||
 | 
					@@ -330,6 +330,7 @@ struct qca_phy_priv {
 | 
				
			||||||
 | 
					 	struct mii_bus *miibus;
 | 
				
			||||||
 | 
					 /*qca808x_end*/
 | 
				
			||||||
 | 
					 	u64 *mib_counters;
 | 
				
			||||||
 | 
					+	a_uint32_t mib_loop_cnt;
 | 
				
			||||||
 | 
					 	/* dump buf */
 | 
				
			||||||
 | 
					 	a_uint8_t  buf[2048];
 | 
				
			||||||
 | 
					 	a_uint32_t link_polling_required;
 | 
				
			||||||
 | 
					--- a/src/ref/ref_mib.c
 | 
				
			||||||
 | 
					+++ b/src/ref/ref_mib.c
 | 
				
			||||||
 | 
					@@ -479,39 +479,37 @@ qca_ar8327_sw_get_port_mib(struct switch
 | 
				
			||||||
 | 
					 #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 int
 | 
				
			||||||
 | 
					-_qca_ar8327_sw_capture_port_tx_counter(struct qca_phy_priv *priv, int port)
 | 
				
			||||||
 | 
					+_qca_ar8327_sw_capture_port_tx_counter(a_uint32_t dev_id, int port)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					     fal_mib_info_t  mib_Info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     memset(&mib_Info, 0, sizeof(fal_mib_info_t));
 | 
				
			||||||
 | 
					-    fal_get_tx_mib_info(priv->device_id, port, &mib_Info);
 | 
				
			||||||
 | 
					+    fal_get_tx_mib_info(dev_id, port, &mib_Info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 int
 | 
				
			||||||
 | 
					-_qca_ar8327_sw_capture_port_rx_counter(struct qca_phy_priv *priv, int port)
 | 
				
			||||||
 | 
					+_qca_ar8327_sw_capture_port_rx_counter(a_uint32_t dev_id, int port)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					     fal_mib_info_t  mib_Info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     memset(&mib_Info, 0, sizeof(fal_mib_info_t));
 | 
				
			||||||
 | 
					-    fal_get_rx_mib_info(priv->device_id, port, &mib_Info);
 | 
				
			||||||
 | 
					+    fal_get_rx_mib_info(dev_id, port, &mib_Info);
 | 
				
			||||||
 | 
					     return 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 qca_ar8327_sw_mib_task(struct qca_phy_priv *priv)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	static int loop = 0;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					 	mutex_lock(&priv->reg_mutex);
 | 
				
			||||||
 | 
					-	if ((loop % 2) == 0)
 | 
				
			||||||
 | 
					-		_qca_ar8327_sw_capture_port_rx_counter(priv, loop/2);
 | 
				
			||||||
 | 
					+	if ((priv->mib_loop_cnt % 2) == 0)
 | 
				
			||||||
 | 
					+		_qca_ar8327_sw_capture_port_rx_counter(priv->device_id, priv->mib_loop_cnt/2);
 | 
				
			||||||
 | 
					 	else
 | 
				
			||||||
 | 
					-		_qca_ar8327_sw_capture_port_tx_counter(priv, loop/2);
 | 
				
			||||||
 | 
					+		_qca_ar8327_sw_capture_port_tx_counter(priv->device_id, priv->mib_loop_cnt/2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	if(++loop == (2 * (priv->ports))) {
 | 
				
			||||||
 | 
					-		loop = 0;
 | 
				
			||||||
 | 
					+	if(++priv->mib_loop_cnt == (2 * (priv->ports))) {
 | 
				
			||||||
 | 
					+		priv->mib_loop_cnt = 0;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	mutex_unlock(&priv->reg_mutex);
 | 
				
			||||||
@@ -200,7 +200,7 @@
 | 
				
			|||||||
			phy-mode = "sgmii";
 | 
								phy-mode = "sgmii";
 | 
				
			||||||
			full-duplex;
 | 
								full-duplex;
 | 
				
			||||||
			pause;
 | 
								pause;
 | 
				
			||||||
			airoha,surge = <1>;
 | 
								airoha,surge = <0>;
 | 
				
			||||||
			airoha,polarity = <2>;
 | 
								airoha,polarity = <2>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,9 +15,14 @@ const ONLINE = 2;
 | 
				
			|||||||
const OFFLINE = 3;
 | 
					const OFFLINE = 3;
 | 
				
			||||||
const ORPHAN = 4;
 | 
					const ORPHAN = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DISCOVER_DHCP = "DHCP";
 | 
				
			||||||
 | 
					const DISCOVER_FLASH = "FLASH";
 | 
				
			||||||
 | 
					const DISCOVER_LOOKUP = "OpenLAN";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let ubus = libubus.connect();
 | 
					let ubus = libubus.connect();
 | 
				
			||||||
let uci = libuci.cursor();
 | 
					let uci = libuci.cursor();
 | 
				
			||||||
let state = DISCOVER;
 | 
					let state = DISCOVER;
 | 
				
			||||||
 | 
					let discovery_method = "";
 | 
				
			||||||
let validate_time;
 | 
					let validate_time;
 | 
				
			||||||
let offline_time;
 | 
					let offline_time;
 | 
				
			||||||
let orphan_time;
 | 
					let orphan_time;
 | 
				
			||||||
@@ -28,7 +33,7 @@ let timeouts = {
 | 
				
			|||||||
	'orphan': 2 * 60 * 60,
 | 
						'orphan': 2 * 60 * 60,
 | 
				
			||||||
	interval: 10000,
 | 
						interval: 10000,
 | 
				
			||||||
	expiry_interval: 60 * 60 * 1000,
 | 
						expiry_interval: 60 * 60 * 1000,
 | 
				
			||||||
	expiry_threshold: 3 * 24 * 60 * 60,
 | 
						expiry_threshold: 1 * 365 * 24 * 60 * 60,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "cloud_discover");
 | 
					ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "cloud_discover");
 | 
				
			||||||
@@ -37,6 +42,24 @@ ulog(LOG_INFO, 'Start\n');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
uloop.init();
 | 
					uloop.init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let cds_server = 'discovery.open-lan.org';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function detect_certificate_type() {
 | 
				
			||||||
 | 
						let pipe = fs.popen(`openssl x509 -in /etc/ucentral/cert.pem -noout -issuer`);
 | 
				
			||||||
 | 
						let issuer = pipe.read("all");
 | 
				
			||||||
 | 
						pipe.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (match(issuer, /OpenLAN Demo Birth CA/)) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "Demo" \n');
 | 
				
			||||||
 | 
							cds_server = 'discovery-qa.open-lan.org';
 | 
				
			||||||
 | 
							timeouts.expiry_threshold = 3 * 24 * 60 * 60;
 | 
				
			||||||
 | 
						} else if (match(issuer, /OpenLAN Birth Issuing CA/)) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "Production"\n');
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "TIP"\n');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function readjsonfile(path) {
 | 
					function readjsonfile(path) {
 | 
				
			||||||
	let file = fs.readfile(path);
 | 
						let file = fs.readfile(path);
 | 
				
			||||||
	if (file)
 | 
						if (file)
 | 
				
			||||||
@@ -78,6 +101,14 @@ function gateway_load() {
 | 
				
			|||||||
	return readjsonfile('/etc/ucentral/gateway.json');
 | 
						return readjsonfile('/etc/ucentral/gateway.json');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function discovery_state_write() {
 | 
				
			||||||
 | 
						let discovery_state = {
 | 
				
			||||||
 | 
							"type": discovery_method,
 | 
				
			||||||
 | 
							"updated": time()
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						fs.writefile('/etc/ucentral/discovery.state.json', discovery_state);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function gateway_write(data) {
 | 
					function gateway_write(data) {
 | 
				
			||||||
	let gateway = gateway_load();
 | 
						let gateway = gateway_load();
 | 
				
			||||||
	gateway ??= {};
 | 
						gateway ??= {};
 | 
				
			||||||
@@ -91,9 +122,10 @@ function gateway_write(data) {
 | 
				
			|||||||
		if (new[key] != gateway[key])
 | 
							if (new[key] != gateway[key])
 | 
				
			||||||
			changed = true;
 | 
								changed = true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (changed)
 | 
						if (changed) {
 | 
				
			||||||
		fs.writefile('/etc/ucentral/gateway.json', new);
 | 
							fs.writefile('/etc/ucentral/gateway.json', new);
 | 
				
			||||||
		system('sync');
 | 
							system('sync');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return changed;
 | 
						return changed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,6 +162,7 @@ function set_state(set) {
 | 
				
			|||||||
		if (prev == VALIDATING) {
 | 
							if (prev == VALIDATING) {
 | 
				
			||||||
			ulog(LOG_INFO, 'Setting cloud controller to validated\n');
 | 
								ulog(LOG_INFO, 'Setting cloud controller to validated\n');
 | 
				
			||||||
			gateway_write({ valid: true });
 | 
								gateway_write({ valid: true });
 | 
				
			||||||
 | 
								discovery_state_write();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -164,7 +197,7 @@ function redirector_lookup() {
 | 
				
			|||||||
	let serial = uci.get('system', '@system[-1]', 'mac');
 | 
						let serial = uci.get('system', '@system[-1]', 'mac');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fs.unlink(path);
 | 
						fs.unlink(path);
 | 
				
			||||||
	system(`curl -k --cert /etc/ucentral/operational.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/operational.ca https://openlan.keys.tip.build/v1/devices/${serial} --output /tmp/ucentral.redirector`);
 | 
						system(`curl -k --cert /etc/ucentral/operational.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/operational.ca https://${cds_server}/v1/devices/${serial} --output /tmp/ucentral.redirector`);
 | 
				
			||||||
	if (!fs.stat(path))
 | 
						if (!fs.stat(path))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	let redir = readjsonfile(path);
 | 
						let redir = readjsonfile(path);
 | 
				
			||||||
@@ -227,15 +260,18 @@ function interval_handler() {
 | 
				
			|||||||
		if (!time_is_valid())
 | 
							if (!time_is_valid())
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							discovery_method = DISCOVER_DHCP;
 | 
				
			||||||
		if (discover_dhcp())
 | 
							if (discover_dhcp())
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (system('/usr/bin/est_client enroll'))
 | 
							if (system('/usr/bin/est_client enroll'))
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							discovery_method = DISCOVER_FLASH;
 | 
				
			||||||
		if (!discover_flash())
 | 
							if (!discover_flash())
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							discovery_method = DISCOVER_LOOKUP;
 | 
				
			||||||
		redirector_lookup();
 | 
							redirector_lookup();
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -255,6 +291,36 @@ function interval_handler() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function trigger_reenroll() {
 | 
				
			||||||
 | 
						ulog(LOG_INFO, 'triggering reenroll\n');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (system('/usr/bin/est_client reenroll')) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'reenroll failed\n');
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						ulog(LOG_INFO, 'reenroll succeeded\n');
 | 
				
			||||||
 | 
						ulog(LOG_INFO, 'stopping client\n');
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						system('/etc/init.d/ucentral stop');
 | 
				
			||||||
 | 
						set_state(DISCOVER);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function expiry_handler() {
 | 
				
			||||||
 | 
						let stat = fs.stat('/etc/ucentral/operational.ca');
 | 
				
			||||||
 | 
						if (!stat)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let ret = system(`openssl x509 -checkend ${timeouts.expiry_threshold} -noout -in /certificates/operational.pem`);
 | 
				
			||||||
 | 
						if (!ret) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'checked certificate expiry - all ok\n');
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ulog(LOG_INFO, 'certificate will expire soon\n');
 | 
				
			||||||
 | 
						trigger_reenroll();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let ubus_methods = {
 | 
					let ubus_methods = {
 | 
				
			||||||
	discover: {
 | 
						discover: {
 | 
				
			||||||
		call: function(req) {
 | 
							call: function(req) {
 | 
				
			||||||
@@ -329,28 +395,16 @@ let ubus_methods = {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		args: {},
 | 
							args: {},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						reenroll: {
 | 
				
			||||||
 | 
							call: function(req) {
 | 
				
			||||||
 | 
								trigger_reenroll();
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							args: {},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function expiry_handler() {
 | 
					detect_certificate_type();
 | 
				
			||||||
	let stat = fs.stat('/etc/ucentral/operational.ca');
 | 
					 | 
				
			||||||
	if (!stat)
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	let ret = system(`openssl x509 -checkend ${timeouts.expiry_threshold} -noout -in /certificates/operational.pem`);
 | 
					 | 
				
			||||||
	if (!ret) {
 | 
					 | 
				
			||||||
		ulog(LOG_INFO, 'checked certificate expiry - all ok\n');
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ulog(LOG_INFO, 'certificate will expire soon\n');
 | 
					 | 
				
			||||||
	if (system('/usr/bin/est_client reenroll')) {
 | 
					 | 
				
			||||||
		ulog(LOG_INFO, 'reenroll failed\n');
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	ulog(LOG_INFO, 'reenroll succeeded\n');
 | 
					 | 
				
			||||||
	ulog(LOG_INFO, '(re)starting client\n');
 | 
					 | 
				
			||||||
	system('/etc/init.d/ucentral restart');
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (gateway_available()) {
 | 
					if (gateway_available()) {
 | 
				
			||||||
	let status = ubus.call('ucentral', 'status');
 | 
						let status = ubus.call('ucentral', 'status');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,24 @@ import * as libuci from 'uci';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
let store_operational_pem = false;
 | 
					let store_operational_pem = false;
 | 
				
			||||||
let store_operational_ca = false;
 | 
					let store_operational_ca = false;
 | 
				
			||||||
let est_server = 'qaest.certificates.open-lan.org:8001';
 | 
					let est_server = 'est.certificates.open-lan.org';
 | 
				
			||||||
let cert_prefix = 'operational';
 | 
					let cert_prefix = 'operational';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function set_est_server() {
 | 
				
			||||||
 | 
						let pipe = fs.popen(`openssl x509 -in /etc/ucentral/cert.pem -noout -issuer`);
 | 
				
			||||||
 | 
						let issuer = pipe.read("all");
 | 
				
			||||||
 | 
						pipe.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (match(issuer, /OpenLAN Demo Birth CA/)) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "Demo" \n');
 | 
				
			||||||
 | 
							est_server = 'qaest.certificates.open-lan.org:8001';
 | 
				
			||||||
 | 
						} else if (match(issuer, /OpenLAN Birth Issuing CA/)) {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "Production"\n');
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ulog(LOG_INFO, 'Certificate type is "TIP"\n');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (getenv('EST_SERVER'))
 | 
					if (getenv('EST_SERVER'))
 | 
				
			||||||
	est_server = getenv('EST_SERVER');
 | 
						est_server = getenv('EST_SERVER');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,6 +94,8 @@ function call_est_server(path, cert, target) {
 | 
				
			|||||||
	if (generate_csr(cert))
 | 
						if (generate_csr(cert))
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						set_est_server();	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let ret = system('curl -m 10 -X POST https://' + est_server + '/.well-known/est/' + path + ' -d @/tmp/csr.nohdr.p10 -H "Content-Type: application/pkcs10" --cert ' + cert + ' --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.nohdr.p7');
 | 
						let ret = system('curl -m 10 -X POST https://' + est_server + '/.well-known/est/' + path + ' -d @/tmp/csr.nohdr.p10 -H "Content-Type: application/pkcs10" --cert ' + cert + ' --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.nohdr.p7');
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		ulog(LOG_INFO, 'Failed to request operational certificate\n');
 | 
							ulog(LOG_INFO, 'Failed to request operational certificate\n');
 | 
				
			||||||
@@ -126,6 +143,9 @@ function load_operational_ca() {
 | 
				
			|||||||
		ulog(LOG_INFO, 'Operational CA is present\n');
 | 
							ulog(LOG_INFO, 'Operational CA is present\n');
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						set_est_server();	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let ret = system('curl -m 10 -X GET https://' + est_server + '/.well-known/est/cacerts --cert /etc/ucentral/' + cert_prefix + '.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/' + cert_prefix + '.ca.nohdr.p7');
 | 
						let ret = system('curl -m 10 -X GET https://' + est_server + '/.well-known/est/cacerts --cert /etc/ucentral/' + cert_prefix + '.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/' + cert_prefix + '.ca.nohdr.p7');
 | 
				
			||||||
	if (!ret)
 | 
						if (!ret)
 | 
				
			||||||
		ret = p7_too_pem('/tmp/' + cert_prefix + '.ca.nohdr.p7', '/etc/ucentral/' + cert_prefix + '.ca');
 | 
							ret = p7_too_pem('/tmp/' + cert_prefix + '.ca.nohdr.p7', '/etc/ucentral/' + cert_prefix + '.ca');
 | 
				
			||||||
@@ -147,7 +167,7 @@ function fwtool() {
 | 
				
			|||||||
	let issuer = pipe.read("all");
 | 
						let issuer = pipe.read("all");
 | 
				
			||||||
	pipe.close();
 | 
						pipe.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(match(issuer, /OpenLAN/) && match(issuer, /Birth CA/)))
 | 
						if (!(match(issuer, /OpenLAN/) && match(issuer, /Birth/)))
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ulog(LOG_INFO, 'The issuer is insta\n');
 | 
						ulog(LOG_INFO, 'The issuer is insta\n');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ import * as fs from 'fs';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
let cmd = ARGV[0];
 | 
					let cmd = ARGV[0];
 | 
				
			||||||
let ifname = getenv("interface");
 | 
					let ifname = getenv("interface");
 | 
				
			||||||
let opt224 = getenv("opt138");
 | 
					let opt138 = getenv("opt138");
 | 
				
			||||||
let opt224 = getenv("opt224");
 | 
					let opt224 = getenv("opt224");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (cmd != 'bound' && cmd != 'renew')
 | 
					if (cmd != 'bound' && cmd != 'renew')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,3 +4,6 @@ MIIFajCCA1KgAwIBAgICDnowDQYJKoZIhvcNAQELBQAwHzEdMBsGA1UEAwwUT3BlbkxBTiBEZW1vIFJv
 | 
				
			|||||||
-----BEGIN CERTIFICATE-----
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
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
 | 
				
			||||||
-----END CERTIFICATE-----
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIIFFTCCAv2gAwIBAgICAxIwDQYJKoZIhvcNAQELBQAwGjEYMBYGA1UEAwwPT3BlbkxBTiBSb290IENBMCAXDTI1MDUxNDA4NDcxMFoYDzIwNTUwNTE0MDg0NzEwWjAaMRgwFgYDVQQDDA9PcGVuTEFOIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGibJ04A55kSURTBSKgcBmLnND2I5wws1taKqqU9aaRhB7NtvMHwh2voH9b1brUiulZaZwTN/9kzd4AnXeKQ+0u5tV7Ofk0fzF2MK47n17TS30Yenqc4NuQEKdpKK/pM3VvOEppR/bqtgyLtDmbDnmFOx+zTj/+smTgouwA+Iier0P4s5OohYxn/bjOqwQbHbU79VpGBIWv6/kt55AhH7zvsqqKHkrzTxnsRBv3SBIufrjJr9PIhZBLDrqr56P6KgAi0eoutNt2ToiJbE0WfjU7GI1RSiSN5bGj1zXhjNVzQWs1H9QzRf3c9pl3+haHQZ7FZ1UqiTRewmbNrQ6I9k81au3SttUlb87MyAuDSzatkiq7CjQ8VE1J6te6ZBt2zWpUhHsR/Lg7g3eOw5dL4oZJdK5GgGu/MUajLUXifIqM13Mvg0VTzDhN69VLXLSL0gPcicsQCwJuAza1IC/VqmBGx19fAkyJhOurCXWOgisi0g1+xzPKRphUNwMPUf8vBVOM/Vc6xDIvwVGE3+eWXyhixneFlSpAI03nWWjpwWXihTBoxbfRXO3Y/ilJqrgFN+U4PJcCPA+Wo7ThH0mgX6bOTPcgXMUzT3v3FF6Bx5/PNV3kYrw2yLzribUiS6AGvVGnW4hX2Z6OQvA/aHME8KF+6y6m4pC7FkUjVaRlzWu/wIDAQABo2MwYTAfBgNVHSMEGDAWgBSUaFuoOPk4QLByZP47kj4p1IbCJjAdBgNVHQ4EFgQUlGhbqDj5OECwcmT+O5I+KdSGwiYwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAB+/RUC2X6eVoPsFNMkaXO5Iib/ub0JoWhODQm8j2Mr5dpGXESSpXjfDcqDOLuJbWWoflXBLdr8BsVCBqOA9YgCX0H8Br7dUWmCScixxLW0he592/424EvdwifxcKHZLjv9CKV5Txhqnm2djc5RY/nTH5MYVrIh/If2TNO5ydDP6+vgy9GQ4en04VK7rz+PW17O8l7k9/lOmYptZmHgSDAPj/cT3PlG+McqaI5rMSHeEHlzH+PvgWjtSeEhF4FwFBXroDl4/yb4l2JB8bqAZ3vsOXSkigFcZh5MXPe+zuSSW+G8iLr4xoi0CFsP2DaHEyxgqP4B1FtE9nFPo6cvWbwqTVT7QSzqfH+jPJuQvpFXeRF5UFegNZTFT5/uFFPamihakFslEYxeJey1y+OJdLcP6ef87ruSt8amsq56OAETYpnW4JFowlEh0C+QwLGHGGY6WrOgHY/90hJmPgXBdBVg/IoOhzbvk5A+LqZDvxV2/rLNfClw8Kr3g5e8obcB6dWgMCy2z+us0H79ucnmhzQKsjpxM9T1ncHovAQfiD3jVqfHULY53avh0wIAjosoTGbe8dyx80quHe+16qWan7C9idXeAYYJXbZt5hs6hLw4I8M1LsjTg6vwsqiaHZpsmDyyQLdFjNJldG7aosfS9F+BIpuwijF+1dashL0CPsbIJ
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,9 @@ PKG_NAME:=ucentral-client
 | 
				
			|||||||
PKG_RELEASE:=1
 | 
					PKG_RELEASE:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git
 | 
					PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git
 | 
				
			||||||
PKG_MIRROR_HASH:=34c912efa9c0dcdbc6122296e236993484b24b3bc4de51608356304afc8df1c3
 | 
					 | 
				
			||||||
PKG_SOURCE_PROTO:=git
 | 
					PKG_SOURCE_PROTO:=git
 | 
				
			||||||
PKG_SOURCE_DATE:=2025-07-27
 | 
					PKG_SOURCE_DATE:=2025-08-11
 | 
				
			||||||
PKG_SOURCE_VERSION:=c536f6957bd96e57301f9d540b75460119d2a69a
 | 
					PKG_SOURCE_VERSION:=549e84e5fea7230c5471d6a3dbddcc7d3152f665
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_LICENSE:=BSD-3-Clause
 | 
					PKG_LICENSE:=BSD-3-Clause
 | 
				
			||||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
					PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ let config;
 | 
				
			|||||||
let offline_timer;
 | 
					let offline_timer;
 | 
				
			||||||
let current_state;
 | 
					let current_state;
 | 
				
			||||||
let online = false;
 | 
					let online = false;
 | 
				
			||||||
 | 
					let leds_off = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function self_healing() {
 | 
					function self_healing() {
 | 
				
			||||||
	let heal_wifi = false;
 | 
						let heal_wifi = false;
 | 
				
			||||||
@@ -148,6 +149,13 @@ function online_handler() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function config_load() {
 | 
					function config_load() {
 | 
				
			||||||
	ulog(LOG_INFO, 'loading config\n');
 | 
						ulog(LOG_INFO, 'loading config\n');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uci.load('system');
 | 
				
			||||||
 | 
						let led_off_cfg = uci.get("system", "@system[0]", "leds_off");
 | 
				
			||||||
 | 
						if (led_off_cfg == 1) {
 | 
				
			||||||
 | 
							leds_off = true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uci.load('state');
 | 
						uci.load('state');
 | 
				
			||||||
	config = uci.get_all('state');
 | 
						config = uci.get_all('state');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -191,7 +199,7 @@ function led_find(alias) {
 | 
				
			|||||||
function factory_reset_timeout() {
 | 
					function factory_reset_timeout() {
 | 
				
			||||||
	let led = led_find('led-running');
 | 
						let led = led_find('led-running');
 | 
				
			||||||
	if (led)
 | 
						if (led)
 | 
				
			||||||
		led_write(led, 'trigger', 'default-on');
 | 
							led_write(led, 'trigger', leds-off ? 'none' : 'default-on');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let blink_timer;
 | 
					let blink_timer;
 | 
				
			||||||
@@ -210,7 +218,7 @@ let state_handler = {
 | 
				
			|||||||
	offline: function() {
 | 
						offline: function() {
 | 
				
			||||||
		online = false;
 | 
							online = false;
 | 
				
			||||||
		let led = led_find('led-running');
 | 
							let led = led_find('led-running');
 | 
				
			||||||
		if (led)
 | 
							if (!leds_off && led)
 | 
				
			||||||
			led_write(led, 'trigger', 'heartbeat');
 | 
								led_write(led, 'trigger', 'heartbeat');
 | 
				
			||||||
		if (config.ui.offline_trigger) {
 | 
							if (config.ui.offline_trigger) {
 | 
				
			||||||
			if (offline_timer)
 | 
								if (offline_timer)
 | 
				
			||||||
@@ -223,7 +231,7 @@ let state_handler = {
 | 
				
			|||||||
	online: function() {
 | 
						online: function() {
 | 
				
			||||||
		online = true;
 | 
							online = true;
 | 
				
			||||||
		let led = led_find('led-running');
 | 
							let led = led_find('led-running');
 | 
				
			||||||
		if (led)
 | 
							if (!leds_off && led)
 | 
				
			||||||
			led_write(led, 'trigger', 'default-on');
 | 
								led_write(led, 'trigger', 'default-on');
 | 
				
			||||||
		online_handler();
 | 
							online_handler();
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					From 309a419087da906a2f3b0f39763f021e9729dd85 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Paul White <paul@shasta.cloud>
 | 
				
			||||||
 | 
					Date: Mon, 4 Aug 2025 04:14:23 +0000
 | 
				
			||||||
 | 
					Subject: [PATCH] base-files: boot: add sync after uci-defaults
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A scenario was seen where UCI config was not flushed to disk before
 | 
				
			||||||
 | 
					an AP power-cycle after uci-defaults was completed.  Since these
 | 
				
			||||||
 | 
					scripts are deleted after being ran once, there is no way to recover
 | 
				
			||||||
 | 
					without a factory reset.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Adding this sync operation proved to help avoid this situation from
 | 
				
			||||||
 | 
					happening
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Paul White <paul@shasta.cloud>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 package/base-files/files/etc/init.d/boot | 1 +
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
 | 
				
			||||||
 | 
					index 15756669a9..c8a803e32c 100755
 | 
				
			||||||
 | 
					--- a/package/base-files/files/etc/init.d/boot
 | 
				
			||||||
 | 
					+++ b/package/base-files/files/etc/init.d/boot
 | 
				
			||||||
 | 
					@@ -15,6 +15,7 @@ uci_apply_defaults() {
 | 
				
			||||||
 | 
					 		( . "./$(basename $file)" ) && rm -f "$file"
 | 
				
			||||||
 | 
					 	done
 | 
				
			||||||
 | 
					 	uci commit
 | 
				
			||||||
 | 
					+	sync
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 boot() {
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.43.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								patches/0099-elfutils-fix-build-with-GCC11.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								patches/0099-elfutils-fix-build-with-GCC11.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					From b82a8514a3f52b91ec84f703ef92740dda19d5d9 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Thu, 14 Aug 2025 10:29:29 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] elfutils: fix build with GCC11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 package/libs/elfutils/Makefile | 2 +-
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/libs/elfutils/Makefile b/package/libs/elfutils/Makefile
 | 
				
			||||||
 | 
					index f7364c36be..76112c89ff 100644
 | 
				
			||||||
 | 
					--- a/package/libs/elfutils/Makefile
 | 
				
			||||||
 | 
					+++ b/package/libs/elfutils/Makefile
 | 
				
			||||||
 | 
					@@ -87,7 +87,7 @@ TARGET_CFLAGS += \
 | 
				
			||||||
 | 
					 	-Wno-unused-result \
 | 
				
			||||||
 | 
					 	-Wno-format-nonliteral
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-ifneq ($(CONFIG_GCC_USE_VERSION_11),y)
 | 
				
			||||||
 | 
					+ifneq ($(CONFIG_GCC_VERSION_11),y)
 | 
				
			||||||
 | 
					 TARGET_CFLAGS += \
 | 
				
			||||||
 | 
					 	-Wno-error=use-after-free
 | 
				
			||||||
 | 
					 endif
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.34.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user