Merge branch 'feat_periodicSync' into dev
This commit is contained in:
		
						commit
						36e8aa9b87
					
				
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @ -38,11 +38,12 @@ In case routes clash or cant be added to Wireguard, Warnings will be logged. | ||||
| 
 | ||||
| ### 1.2.1. Environment | ||||
| 
 | ||||
| Variable|Description|Default | ||||
| -|-|- | ||||
| `INTERFACE`*      | Wireguard-Interface Name  | | ||||
| `FILTER_PROTOCOL` | Protocol to react on      | All | ||||
| `FILTER_TABLE`    | Table to react on         | All | ||||
| Variable|Description|Type|Default | ||||
| -|-|-|- | ||||
| `INTERFACE`*      | Wireguard-Interface Name | String       | | ||||
| `FILTER_PROTOCOL` | Protocol to react on | Number / iproute2-name  | All | ||||
| `FILTER_TABLE`    | Table to react on | Number / iproute2-name  | All | ||||
| `PERIODIC_SYNC`   | Reguarly sync the routing-table <br> Useful when the wg-interface is changed/updated without us knowing  | Seconds  | -1 | ||||
| 
 | ||||
| *\* Required* | ||||
| 
 | ||||
|  | ||||
| @ -3,6 +3,8 @@ package main | ||||
| import ( | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| 
 | ||||
| 	envChecks "git.ruekov.eu/ruakij/routingtabletowg/lib/environmentchecks" | ||||
| 	ip2Map "git.ruekov.eu/ruakij/routingtabletowg/lib/iproute2mapping" | ||||
| @ -24,6 +26,8 @@ var envDefaults = map[string]string{ | ||||
| 
 | ||||
| 	"FILTER_PROTOCOL": "-1", | ||||
| 	"FILTER_TABLE":    "-1", | ||||
| 
 | ||||
| 	"PERIODIC_SYNC": "-1", | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| @ -55,6 +59,12 @@ func main() { | ||||
| 		logger.Error.Fatalf("Couldn't read FILTER_TABLE '%s': %s", filterTableStr, err) | ||||
| 	} | ||||
| 
 | ||||
| 	periodicSyncStr := os.Getenv("PERIODIC_SYNC") | ||||
| 	periodicSync, err := strconv.Atoi(periodicSyncStr) | ||||
| 	if err != nil { | ||||
| 		logger.Error.Fatalf("Couldn't read PERIODIC_SYNC '%s': %s", periodicSyncStr, err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Create filter | ||||
| 	filterOptions := FilterOptions{ | ||||
| 		Table: filterTable, | ||||
| @ -93,6 +103,33 @@ func main() { | ||||
| 	} | ||||
| 	 | ||||
| 	logger.Info.Printf("Initially setting all current routes") | ||||
| 	syncCurrentRoutesToHandler(routeSubChan, routeList) | ||||
| 	 | ||||
| 	if(periodicSync > 0){ | ||||
| 		go runPeriodicSync(periodicSync, link, routeSubChan) | ||||
| 	} | ||||
| 
 | ||||
| 	select {} | ||||
| } | ||||
| 
 | ||||
| func runPeriodicSync(seconds int, link netlink.Link, routeSubChan chan netlink.RouteUpdate){ | ||||
| 	interval := time.Duration(seconds) * time.Second | ||||
| 	for { | ||||
| 		time.Sleep(interval) | ||||
| 
 | ||||
| 		// Get routing-table entries from device | ||||
| 		routeList, err := netlink.RouteList(link, netlink.FAMILY_ALL) | ||||
| 		if err != nil { | ||||
| 			logger.Error.Fatalf("Couldn't get route-entries: %s", err) | ||||
| 		} | ||||
| 		 | ||||
| 		logger.Info.Printf("Periodically syncing all routes") | ||||
| 		syncCurrentRoutesToHandler(routeSubChan, routeList) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func syncCurrentRoutesToHandler(routeSubChan chan netlink.RouteUpdate, routeList []netlink.Route){ | ||||
| 	 | ||||
| 	for _, route := range routeList { | ||||
| 		// Ignore routes with empty gateway | ||||
| 		if(route.Gw == nil){ | ||||
| @ -105,8 +142,6 @@ func main() { | ||||
| 			Route: route, | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	select {} | ||||
| } | ||||
| 
 | ||||
| var routeUpdateTypeMapFromId = map[uint16]string{ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user