Wednesday, March 29, 2017

A sample netmap application

There and back again. After a seven year pause in hardcore tech stuff,  I've again started to code.

After cleaning the rust and dust off, I'm happy to see my tech skills remain intact.

It still feels good :)

Nowadays, I'm working on a novel network threat detection engine for my new startup. I'll be sharing some stuff that I think would be of value to people out there.

Here's the first one:

We've decided to utilize FreeBSD's netmap fast packet I/O API for managing packet input/output at high speeds. Since the documentation is quite limited, it's hard to find a minimal working sample code demonstrating netmap functionality.

Below is a simple packet receiver code which just counts the number of packet received off the wire:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <poll.h>
#include <fcntl.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/mman.h>

#include <net/netmap_user.h>

int
main(int argc, char **argv)
{
        struct  netmap_if *nifp;
        struct  netmap_ring *ring;
        struct  nmreq nmr;
        struct  pollfd fds;
        int fd = 0;
        void *p = NULL;
        int i = 0;
        void *buf = NULL;
        int tot = 0;
        int nret = 0;

        if (argc < 2) {
                printf("%s int\n", argv[0]);
                return(1);
        }

        if ((fd = open("/dev/netmap", O_RDWR)) < 0) {
                perror("open");
                return(1);

        }
       
        bzero(&nmr, sizeof(nmr));
        strcpy(nmr.nr_name, argv[1]);
        nmr.nr_version  = NETMAP_API;

        /* Register interface for Netmap mode, bypass OS stack */
        if (ioctl(fd, NIOCREGIF, &nmr) != 0) {
                perror("ioctl");
                return(1);
        }
        /* MAP kernerl ring buffers to userspace */
        if ((p = mmap(0, nmr.nr_memsize, PROT_READ | PROT_WRITE, MAP_SHARED , fd, 0)) == NULL) {
                perror("mmap");
                return(1);
        }
        nifp =  NETMAP_IF(p, nmr.nr_offset);
        ring =  NETMAP_RXRING(nifp, 0);
        fds.fd  = fd;
        fds.events = POLLIN;
        for (;;) {
                poll(&fds, 1, 1000);
                while (!nm_ring_empty(ring)) {
                        i = ring->cur;
                        buf = NETMAP_BUF(ring,  ring->slot[i].buf_idx);
                        /* Insert your cool stuff here */
                        ring->head = ring->cur  = nm_ring_next(ring, i);
                        nret++;
                }
                if (ioctl(fd, NIOCRXSYNC, NULL) != 0)
                        perror("sync ioctl");
                tot += nret;
                printf("recv'd %d packets, total: %d\n", nret, tot);
                nret = 0;
        }
        return 0;
}

Tuesday, September 2, 2014

At binenin...

Eskimeyen eskilerin adrese teslim, taşı gediğine koyan deyişlerine bayılıyorum. Ne eksik, ne fazla. Öyle bir anlatılır ki anlatılmak istenen, ne eksik gedik kalır, ne de çer çöp, ilgisiz saz ve söz karışır.

Asıl konum atasözlerimiz değil, fakat bilgelik fışkıran atasözlerimizden birinin anlattığı bir anlam, tekno-girişimcilik ekseninden çok önemli: 'At binenin, kılıç kuşananın'.

Firmamızda şu an biri yolda, ikisi olgunlaşan üç tekno-girişimi büyütüyoruz. Bunların hepsinde de, firma kurucularının iş fikirleri ve vizyonları hayat buluyor.

Bu yıl kurumsal altyapısını tamamlamayı hedeflediğimiz Vizyon Arge oluşumumuzda hedeflerimizden en önemlisi, ekip arkadaşlarımızın da teknoloji odaklı iş fikri üretmeleri. İş fikirleri ticarileşip başarılı olma potansiyeli yüksek görülürse, öneri sahibi arkadaşımızı, yeni girişimin 'co-founder'ı kabul edip yola beraber, bu defa 'ortak' olarak çıkacağız.

Bu düşünceyi ekibe açtığımda, arkadaşlar, birer ikişer, 'Murat bey, inovatif yeni şeyler ortaya koymak çok zor. İcat edilecek herşey zaten icat edildi, yeni birşey bulmak mümkün değil', yorumlarıyla geldiler.

Ben buna katılmıyorum. İnovasyon, illa yerçekimi kuralını keşfetmek, elektriği bulmak, transistörü icat etmek demek değil. İnsanoğlunun hayatını kolaylaştıran her yenilik inovasyondur. Bu, bilgisayarın üretilmesi ve İnternet'te olduğu gibi 'ground-breaking' bir yenilik de olabilir; grafik işlemcilere 'pattern matching' yaptıran bir hack de pekala olabilir.

Tekno-girişim ekseninden baktığınızda, her inovasyon ticarileşme potansiyelini içinde barındırmayabilir, o ayrı mesele. Fakat, insanoğlunun ihtiyacı sonsuzdur, dolayısıyla icat edilmiş herşeyin iyileştirilmesine ve geliştirilmesine olan ihtiyaç da, insanoğlu bu dünya üzerinde yaşamaya devam ettikçe artarak devam edecektir.

Transistör'ü hesap makinalarında kullanan insanoğlu, tüm ihtiyaçlarını karşılayabilmiş olsaydı, bunu yeterli görüp, bilgisayaların icadına yol aralayacak olan entegre devreleri, mikroçipleri icat etmek için uğraşıp durmazdı.

Bilgisayarın askeri sistemlerde kullanılması yeterli olsaydı, IBM 'Personal Computing' çağını aralamazdı. ARPANET, İnternet'e dönüşmezdi. IPv4 neyimize yetmiyordu ki, bir de IPv6'yı çıkardılar başımıza?

İhtiyaç.

İnsanoğlu, her bir yenilikle aslında yeni kabiliyetlere sahip oluyor. Bu yeni kabiliyetler, O'na yepyeni sahalar açıyor. Yeni sahalar da yeni kabiliyetler gerektiriyor, yeni ihtiyaçlar doğuruyor.

İnovasyonun itici gücü bu. Doğurgan bir döngü. Her çözüm, yeni bir problemi de beraberinde getiriyor.

Her yeni problem de, tekno-girişimciler için yeni bir oyun alanı.

Tabi görebilene....

Bu oyun alanında top koşturabilmek için, öncelikle ligde olmanız lazım. Sahaya inmeniz lazım, sahada olmanız lazım, sahada kalmanız lazım.

Yani:

At binenin, kılıç kuşananın.







Tuesday, July 9, 2013

Başladık bakalım...

'Başladık bakalım' diyeli dört ay olmuş...

'Hello world' tadındaki ilk yazımı tamamlayıp post etmemin dört ay sürmesi gelecekteki yazılarım için pek umut vermese de, başladık bakalım...

Neredeyse uçan kuşun bile bir blog'u var, seninki nerdeydi bu kadar zamandır?

Paylaşmayı seviyorum. @enderunix'te başlayan bu 'öğrenme, öğretme ve üretme' serüvenimi hala devam ettirebildiğimi düşünüyorum. @endersys ve @vizyonarge her ne kadar ticari hüviyeti haiz olsalar da benim için, 'öğrenme, öğretme ve üretme' yolculuğumun duraklarından ibaretler.

Bu ülkeden dünyanın kullandığı yazılımlar çıksın arzumuzdu. Sanıyorum @enderunix'te bu bir nebze olsun başarıldı.  Orada geliştirilen yazılımlar, dünyanın dört bir yanından download edildi, birçok noktada kuruldu, hala da kullanılıyor. Makaleler ha keza, bazıları dünyada ilk oldular.

Bu süreçte çokça paylaştık, paylaştım. Yazdığımız açık kaynak yazılımlardan hiçbiri beş kuruş geri dönmedi, fakat bu vatanın evladının yazdığının ve paylaştığının dünya tarafından kullanılıyor olmasının hazzı sanırım paraya pula değişilmezdi.

Şimdi bu başarıyı, çok daha üst katmanlara taşıyabilecek miyiz, bakacağız. Bir mesafe aldığımızı söyleyebilirim, fakat daha kat edeceğimiz çok yol var gibi görünüyor.

Girişimcilik serüvenimiz 2006'da başladı. Dile kolay... Sekiz yıl olacak.

Ar-ge tarafında üç girişim, üç çocuk gibi... Her birinin hayata gözlerini açması, ilk ürünlerinin piyasaya çıkması, gelişmesi... Doğrusu yanlışıyla, edinilmiş bir çok tecrübe. Edinilecek bir sürü tecrübe.

'Bir gün'e 24 saat az geliyor, vakit yok, yapılacaklarsa çok. Bu yüzden 'Blog'a sıra gelmedi.

Peki şimdi? Şimdi vaktin var mı? Yok. TODO listesine +1 eklemiş olduk.

Vaktim müsait oldukça buraya karalayacağım. Burada 'paylaşacaklarım', genelde tekno-girişim serüvenim ve bilgi güvenliği özelinde notlar olacak. Bazen bir bilgi, bazen bir haber, bazen bir anı. Bazen de dertleşeceğiz.

Büyük adamız, dur bir racon keselim derdim yok.

Just my five cents...