mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +00:00 
			
		
		
		
	APC: Fix BDR takes place of DR
Raise the priority of BDR in case when DR is inactive, so that in the election process BDR is elected as DR. Signed-off-by: Chaitanya Godavarthi <chaitanya.kiran@netexperience.com>
This commit is contained in:
		 Chaitanya Godavarthi
					Chaitanya Godavarthi
				
			
				
					committed by
					
						 Rick Sommerville
						Rick Sommerville
					
				
			
			
				
	
			
			
			 Rick Sommerville
						Rick Sommerville
					
				
			
						parent
						
							327b85b44a
						
					
				
				
					commit
					d0330e8b70
				
			| @@ -189,8 +189,11 @@ void apc_send_hello(struct apc_iface * ifa, int kind ) | |||||||
| 			else | 			else | ||||||
| 				ApcSpec.FloatIp = ApcSpecSaved.FloatIp; | 				ApcSpec.FloatIp = ApcSpecSaved.FloatIp; | ||||||
| 		} | 		} | ||||||
| 		else | 		else if (ApcSpec.IsApc == I_AM_BAPC ) | ||||||
| 		{ | 		{ | ||||||
|  | 			ifa->priority = 0x12; | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
| 			ifa->priority = 0x11; | 			ifa->priority = 0x11; | ||||||
| 			if ((ApcSpecSaved.IsApc == I_AM_APC) || BackingUpRadius ) | 			if ((ApcSpecSaved.IsApc == I_AM_APC) || BackingUpRadius ) | ||||||
| 			{ | 			{ | ||||||
|   | |||||||
| @@ -482,10 +482,13 @@ static void inactivity_timer_hook(struct _timer * tmr) | |||||||
| 			n_neigh += 1; | 			n_neigh += 1; | ||||||
| 			//Radius stuff | 			//Radius stuff | ||||||
| 			BackingUpRadius = 1; | 			BackingUpRadius = 1; | ||||||
|  | 			apc_ifa->priority = 0x33; | ||||||
| 		} | 		} | ||||||
|  | 		else | ||||||
|  | 			apc_ifa->priority = 0x11; | ||||||
|  |  | ||||||
|  |  | ||||||
| 		apc_ifa->drip = MyIpAddr; | 		apc_ifa->drip = MyIpAddr; | ||||||
| 		apc_ifa->priority = 0x11; |  | ||||||
| 		apc_ifa->bdrip = 0; | 		apc_ifa->bdrip = 0; | ||||||
| 		memset(&ApcSpec, 0, sizeof(struct apc_spec)); | 		memset(&ApcSpec, 0, sizeof(struct apc_spec)); | ||||||
| 		WaitingToReelect = 12; | 		WaitingToReelect = 12; | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ static struct blob_buf nb; | |||||||
| static const char *ubus_path; | static const char *ubus_path; | ||||||
| timer *notify_timer; | timer *notify_timer; | ||||||
| extern struct apc_iface * apc_ifa; | extern struct apc_iface * apc_ifa; | ||||||
| #define APC_NOTIFY_INTERVAL 30 | #define APC_NOTIFY_INTERVAL 10 | ||||||
|  |  | ||||||
| struct apc_state { | struct apc_state { | ||||||
| 	char mode[4]; | 	char mode[4]; | ||||||
| @@ -94,7 +94,7 @@ apc_info_handle(struct ubus_context *ctx, struct ubus_object *obj, | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static char apc_mode[APC_MAX_MODE][8] = {"DOWN", "LOOP", "WAITING", "PTP", "OR", "BDR", "DR"}; | static char apc_mode[APC_MAX_MODE][8] = {"DOWN", "LOOP", "WT", "PTP", "OR", "BDR", "DR"}; | ||||||
| void apc_update_state() | void apc_update_state() | ||||||
| { | { | ||||||
| 	struct in_addr dr_addr; | 	struct in_addr dr_addr; | ||||||
| @@ -112,8 +112,12 @@ void apc_update_state() | |||||||
| 			 "%s", inet_ntoa(dr_addr)); | 			 "%s", inet_ntoa(dr_addr)); | ||||||
| 		snprintf(state.bdr_addr, sizeof(state.bdr_addr), | 		snprintf(state.bdr_addr, sizeof(state.bdr_addr), | ||||||
| 			 "%s", inet_ntoa(bdr_addr)); | 			 "%s", inet_ntoa(bdr_addr)); | ||||||
| 	} | 	} else if (apc_ifa->state == APC_IS_WAITING) { | ||||||
| 	else { | 		snprintf(state.mode, sizeof(state.mode), "%s", | ||||||
|  | 			 &apc_mode[apc_ifa->state][0]); | ||||||
|  | 		snprintf(state.dr_addr, sizeof(state.dr_addr), "0.0.0.0"); | ||||||
|  | 		snprintf(state.bdr_addr, sizeof(state.bdr_addr), "0.0.0.0"); | ||||||
|  | 	} else { | ||||||
| 		snprintf(state.mode, sizeof(state.mode), "NC"); | 		snprintf(state.mode, sizeof(state.mode), "NC"); | ||||||
| 		snprintf(state.dr_addr, sizeof(state.dr_addr), "0.0.0.0"); | 		snprintf(state.dr_addr, sizeof(state.dr_addr), "0.0.0.0"); | ||||||
| 		snprintf(state.bdr_addr, sizeof(state.bdr_addr), "0.0.0.0"); | 		snprintf(state.bdr_addr, sizeof(state.bdr_addr), "0.0.0.0"); | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ Index: opensync-2.0.5.0/interfaces/opensync.ovsschema | |||||||
| =================================================================== | =================================================================== | ||||||
| --- opensync-2.0.5.0.orig/interfaces/opensync.ovsschema | --- opensync-2.0.5.0.orig/interfaces/opensync.ovsschema | ||||||
| +++ opensync-2.0.5.0/interfaces/opensync.ovsschema | +++ opensync-2.0.5.0/interfaces/opensync.ovsschema | ||||||
| @@ -9368,6 +9368,68 @@ | @@ -9368,6 +9368,69 @@ | ||||||
|              } |              } | ||||||
|         }, |         }, | ||||||
|        "isRoot": true |        "isRoot": true | ||||||
| @@ -57,6 +57,7 @@ Index: opensync-2.0.5.0/interfaces/opensync.ovsschema | |||||||
| +                  "DR", | +                  "DR", | ||||||
| +                  "BDR", | +                  "BDR", | ||||||
| +                  "OR", | +                  "OR", | ||||||
|  | +                  "WT", | ||||||
| +                  "NC" | +                  "NC" | ||||||
| +                ] | +                ] | ||||||
| +              ] | +              ] | ||||||
|   | |||||||
| @@ -701,8 +701,7 @@ void APC_config_update(struct schema_APC_Config *conf) | |||||||
| 	apc_uci = uci_alloc_context(); | 	apc_uci = uci_alloc_context(); | ||||||
|  |  | ||||||
| 	blob_buf_init(&apcb, 0); | 	blob_buf_init(&apcb, 0); | ||||||
|  | 	if (conf && conf->enabled == true) { | ||||||
| 	if (conf->enabled == true) { |  | ||||||
| 		blobmsg_add_bool(&apcb, "enabled", 1); | 		blobmsg_add_bool(&apcb, "enabled", 1); | ||||||
| 		system("/etc/init.d/apc start"); | 		system("/etc/init.d/apc start"); | ||||||
| 	} else { | 	} else { | ||||||
| @@ -721,7 +720,9 @@ static void callback_APC_Config(ovsdb_update_monitor_t *mon, | |||||||
|                                 struct schema_APC_Config *old, |                                 struct schema_APC_Config *old, | ||||||
|                                 struct schema_APC_Config *conf) |                                 struct schema_APC_Config *conf) | ||||||
| { | { | ||||||
| 	if (mon->mon_type != OVSDB_UPDATE_DEL) | 	if (mon->mon_type == OVSDB_UPDATE_DEL) | ||||||
|  | 		APC_config_update(NULL); | ||||||
|  | 	else | ||||||
| 		APC_config_update(conf); | 		APC_config_update(conf); | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user