Thursday, January 27, 2011

Growing a REST API, Part I of 2

This REST API that I had a hand in (more like both hands in) for the Vyatta router (also known as the Vyatta Remote Access API) was a complete rewrite of a more traditional XML state-aware API (and which replaced an even earlier version).

In retrospect, given the progression of versions it was with REST that the simplest HTTP based API was designed. I'd even say that the work was well focused due to REST constraints applied to the design of the interface.

Thursday, January 20, 2011

Web performance tool, simply and quickly: Pylot

Here's a tool I've used a few times, and each time it delivered what I wanted with minimal fuss. And in the world of development tools there's something to said about that. It's a simple straightforward http request/response performance/timing tool. But one that packs enough features to be useful in a variety of situations.


Thursday, January 13, 2011

Communicating with the Kernel via Netlink, Part II

OK--continuing on from where we left off with part I. The previous post ran through key details of the overall layout of the objects, aspects of the Netlink interface and some source snippets from the listener and sender classes. This time I want to cover the event object and parsing of the netlink data object. Plus, source code is located at the end of this article.

Friday, January 7, 2011

Communicating with the Kernel via Netlink, Part I

This is a simple C++ class wrapper that interacts with the Linux Netlink interface. It's good all by itself or as a source code jumping off point, so to speak. The specific implementation was designed to work at the layer 2 and layer 3 OSI layer.

Just to give you an idea--here's an example of the output this program generates when started up and dumping the state of the interfaces:

results for lo(1)
  type: NEWLINK
  state: UP
  running: yes
  enabled: yes
  mtu: 16436
  mac: 00:00:00:00:00:00

results for eth0(2)
  type: NEWLINK
  state: UP
  running: yes
  enabled: yes
  mtu: 1500
  mac: 08:00:27:41:DE:23

results for lo(1)
  type: NEWADDR
  addr: 127.0.0.1
  broadcast: 0.0.0.0
  mask length: 8

results for eth0(2)
  type: NEWADDR
  addr: 10.3.0.185
  broadcast: 10.3.0.255
  mask length: 24

results for eth0(2)
  type: NEWADDR
  addr: 1.1.1.1
  broadcast: 0.0.0.0
  mask length: 20