Mininet & multiple distributed controllers? - sdn

I am new in Mininet and SDN. I would like to implement multiple distributed controllers in Mininet.
Is there any tutorial that can help with that?

Mininet is used to emulate the switches and the network. Mininet comes with an in built reference controller (POX), which does not support distributed controllers.
Thus, you need to use an external controller which supports distributed instances. For example, ONOS and OpenDaylight.
I have tried it with ONOS and it works. An introductory tutorial can be found at this link.
Then you can connect your mininet network with the external controller using the mininet API like so
sudo mn --controller=remote,ip='IP address of the controller'
After choosing a suitable controller, a good place to start are the official wikis. Also, you might want to join the mailing lists; the developers are very active and reply to most queries.

Related

Can WebRTC be used to broadcast from one machine and view on another machine?

I have been trying to work with WebRTC for live streaming it on one machine and view it on another machine. The thing is i am able to broadcast and view it on same machine, but with different machines it not working. Can anyone guide me through it to stream from one machine and view it on another?
One of possible issues: if your machines are not in the same network then you have to use STUN/TURN server so that the machines could find each other. You can try to use these:
stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302
Also this example of using STUN might be helpful: https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

Is LoRaWan only accessible with an internet connection?

I'm planning to build an IoT project for an oil palm plantation through the use of an Arduino and an Android Mobile application for my final year project in University. As plantations have low to no communication signals which includes wifi, it is possible to implement LoRaWAN without access to the internet/use/ of a web-based application?
The LoRaWAN node does not need any other communications channel aside from LoRaWAN, of course. Would not make any sense otherwise. ;-)
The gateway however does need a connection to the server application that is to be used as a central instance for your use case. Usually this is an existing LoRaWAN cloud service such as The Things Network (TTN) with your application connected behind, but in theory you could connect the gateway to your very own central, making your whole network independent. This is possible because LoRa uses frequency bands free for use (ISM bands) so anyone can become a „network operator“. The TTN software is available as Open Source, for example.
Connection from the gateway to the central is usually done via existing Ethernet/WiFi infrastructures or mobile internet (3G/4G), whatever suits best.
Besides, the LoRa modules available for Arduinos can be used for a low-level, point-to-point LoRa (not LoRaWAN) connection between two such modules. No gateway here. Maybe that is an option, too, for your use case.
The LoraWAN is using the Gateway connected to some kind of cloud, for example the TTN network which is community based. If you live in a bigger city you have good chances to have a TTN Gateway in your area.
You can however connect two Lora nodes together to get a point to point connection. You can send data from Node1, which is connected to some kind of sensor and batterypowered, to Node2, which is stationary and stores all the data to a flashdrive for example. From this flashdrive you can import the data to a website or you could use an application like Node-Red to display the data on a Dashboard.
Here you will find instructions on how to send Data from one Lora-Node to another.
Here you will find instuctions on how to use Node-Red to display your Lora-Data. You will have to change the input from the TTN-Cloud to a textfile on your Raspberry, or whatever gateway you use. (Optional)

Connecting deepstream nodes directly

Deepstream docs:
For smaller clusters it used to be possible to connect deepstream nodes directly in a full-mesh configuration (everyone-to-everyone). This feature has been deprecated in its current incarnation, but will soon be replaced by a more scalable (and hopefully slightly smarter) direct-message-connector plugin based on the Small World Network Paradigm.
Is it possible to create the described (but deprecated) mesh with a deepstream cluster? I wasn't able to find any real example of this.
An example thought is a Chat Application. This application would run on each users desktop and each establish a deepstream server. There would be some discovery logic to connect to other instances on the same LAN. The clients would sync data across each other through their own ds servers running on their desktop.
I know IPFS has this sort of thought, but wanted this to be more application-based and deepstream seemed like a good place to start.
Edit:
I did just find this: https://deepstreamhub.com/tutorials/protocols/webrtc-full-mesh/
-- Interested in understanding why this might not be the best scalable solution and if there are possible work arounds
Clustering deepstream servers is currently only available as part of our enterprise offering [1]. We've built a decentralized clustering mechanism allowing it to scale to millions of concurrent connections and billions of messages.
If you're looking to build a chat application you wouldn't have a deepstream server running on each persons computer. What you would do is either:
set up one deepstream server [2] (we've found that an individual server can easily handle ~100 000 connected clients)
create an application on deepstreamHub [3] (deepstreamHub is our hosted version of deepstream where you don't need to run any servers yourself).
Each user of your chat application has a deepstream client that connects to the server. These clients are websocket based and are able to send/receive messages and sync data for your chat application.
Take a look at some of the example apps [4] we've built, these include some chat apps as well as other demos you might find interesting.
deepstream enterprise 1
deepstream open source 2
deepstreamHub 3
example applications 4

Openstack create volume via Nova API

I'm trying to build a small webapp that will handle our development environments located on an openstack infrastructure (version 2012.2.2-dev, bundled in ubuntu 12.04) and I need to create some volumes using the API (i decided to use openstack rest api). I'm able to start machines and do some other operations (everything is built based on this: http://api.openstack.org/api-ref.html). If I send the request to create a volume as explained on the api reference, i get a 404. I tried different api versions (v1), but still no success.
Thank you in advance.
What language are you coding in? You could just use an SDK for this and skip trying to talk to the API directly. See
https://wiki.openstack.org/wiki/SDKs
In newer releases of OpenStack it is preferable to make use of the Cinder API rather than Nova API.
In folsom, Cinder uses IDENTICAL API refs to Nova volume related API sets. This is because this was the first release to separate out volume management to cinder as a stand alone project. While volume API references remain in folsom it is not the default and it is not the preferred method for accessing volumes REST queries.
Check out.
http://docs.openstack.org/developer/cinder/

Choosing between network (Ethernet or WiFi) programmatically

On my mac I have two kinds of networks available - Ethernet, WiFi.
While making a server call, can I somehow control which network channel to use for making the server call? So, before making server call, I want to specify the network channel to be used for that call - Ethernet or WiFi.
How can this be achieved using objective C. I am working on a cocoa application.
I assume both NIC's are connected to Internet (so both have a IP):
I don't think you can solve it within code (not 100% sure). But what you could do is setup some local routes, configuring which traffic goes over what NIC.
Look at the route command ('man route').
This might help you:
https://serverfault.com/questions/100613/public-traffic-to-go-over-1-nic-and-private-traffic-to-use-another-nic
You can modify the routes available with the System Configuration framework. In scutil(8) you can see the routes that are presently installed in the State:/Network/Service/* dictionaries, and in order to manipulate these programmatically you have to us the SCDynamicStore framework, which is C.
However, if you were trying to just do some ad-hoc service on WLAN only, you could use the CoreWLAN framework, which is in Objective-C.