I am looking at creating a local community WIFI service. Part of that is being able to dynamiclly register MAC/IP address’s and also to define various throttleing levels to those MAC/IP
Through the API can RouterOS support this type of functionality and what programming languages does it support ?
I understand this may be a large mountain to climb but I am wanting to select the correct solution & standardise on the correct Platform before I start.
Have looked at OPenWRT but really like the look of the Mikrotik product
Since this is just another TCP protocol, if your language of choice has any means of dealing with TCP sockets, you could potentially create your own client if one is not already available, or if you don’t like any existing client.
The API client needs to run on a different device than the router itself. Whatever the platform on that other device, if it has any networking capabilities, it will work with any language that can run there.
I have a PHP client, but if for one reason or another you decide to use C# (in ASP.NET or with a desktop application), there’s a client in C# too (two clients in fact; I’d reccomend danikf’s one), and there’s also a JAVA client, a Perl client, a C client and more.
Thanks for the links ..would be looking @ a C# client…have been looking around and there is some suggestion to be using a FreeRadius server to handle the AAA Authentiction Authorisation & Accounting aspects of the service and use the Mikrotik product as the infrastructure. Instead of rebuilding the wheel type of deal ???
There is also RouterOS’ “user-manager” tool, although an external RADIUS server like FreeRADIUS is more flexible, in that it can directly write to an external SQL database (which can in turn be used by external applications). On the other hand, the database uses its own format that you must adhere to if you are to extend it, plus contacting an external RADIUS server makes checks slower due to the need to contact the server and pull information. Not to mention that the RADIUS server becomes the single point of failure.
With the API, you can instead push updated information to routers that need it, in turn making the network more efficient and resilient, while keeping information in a database with your own format that suits your needs. The disadvange though is that you need to actually write the program that would do the pushing. Depending on your scenario (e.g. if you need accounting), sending data from the router to the DB could also be tricky (though not impossible).
The two are not mutually exclusive though - you could use RADIUS, while you also regularly run an application that, using the API, would update entries on the routers, based on what the RADIUS server says. The advantages combine the advantages of each approach - you have an efficient and resilient network where routers can easily give data back to the database (via contacts to the RADIUS server). The disadvantages of the approach also combine the disadvantages of each approach separately - you must write the pusher application, and this application must recognize the RADIUS format from the database.