OpenDaylight入门教程

2014-08-02 by muzi

关于OpenDaylight

OpenDaylight is an open platform for network programmability to enable SDN and create a solid foundation for NFV for networks at any size and scale.

对于SDN而言,ODL(OpenDaylight)是一个开源的可编程的平台,简单的说是一个非常有野心开源控制器而不仅仅只是控制器。

opendaylight官网:http://www.opendaylight.org/

环境配置

  • jdk需要1.6以上。

    sudo apt-get -y install openjdk-7-jdk

更多安装信息请查看:https://wiki.opendaylight.org/view ...

read more

【python爬虫】抓取淘宝模特图片——20分钟爬虫之旅

2014-07-24 by muzi

前言

很多人说学Python最终需要写一个爬虫才能算是学成出山了,而我就是那个留级生,一直没有写过。炎热的夏日,以及看java的抑郁,让我无聊之中萌生了这个想法。于是在百度的帮助下,写完了这个教程。视频教程可以去百度学堂看,我就是在那里看的。

spider

代码详解就不多加介绍,注释相信已经很明确了,请看代码。

import urllib2
import urllib
import sys

class get_mm_pic(object):
    def __init__(self,page_num):
    self.page_num = page_num
    self.mmurl= "http://mm.taobao.com/json/request_top_list.htm?type=0&page="#抓取的链接
    def get_pic(self):
    i = 1
    page_num ...
read more

nox实现nat功能

2014-05-04 by muzi

前言

nat功能是一个非常简单,但却非常重要的功能。保留10,127,192三个网段作为公网地址,通过nat实现地址复用,可以解决现网IPV4地址不够用的尴尬局面。本篇主要讲如何使用nox实现nat的demo.

环境

  • nox 安装比较困难,请参看其他教程
  • mininet 网络环境搭建神器

控制器

首先在nox/src/coreapps/switch中找到switch.cc。 在class switch中添加成员变量uint32_t src_ip,nat_ip;由于只是一个简单的demo,就不做映射列表了。

handle_packet_in中将if(setup_flows && out_port!=-1)的逻辑修改如下:

if (setup_flows && out_port != -1)
{
    auto fm = v1::ofp_flow_mod().match(flow).buffer_id(pi.buffer_id())
               .cookie(0).command(v1::ofp_flow_mod ...
read more

[c]线程池的实现

2014-04-28 by muzi

前言

这是C语言培训的最后一题,线程池,今天看了看控制器的代码,看到了线程池的影子,然后发现应该赶紧写完这篇了。哎,文笔不行,写书写成屎了!希望再修改几次能不丢人吧。

本篇主要介绍如何实现一个线程池模型,task是简单的打印,当然如果你想让线程池完成你的功能线程的管理,只需要将task换成你的线程就可以了。

线程池

(摘自百度百科)线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。

组成:

  • 线程池管理器(ThreadPoolManager):用于创建并管理线程池
  • 工作线程(WorkThread): 线程池中线程
  • 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
  • 任务队列:用于存放没有处理的任务。提供一种缓冲机制。

更多可访问:http://baike.baidu.com/link?url=caXqYSEEEDLS28VYuSzSxPbTM3dt_5WwXqF2-TUxR8ptJxggJaJHfTZ3_9Hs4urU#2

threadpool.h

threadpool.h的功能主要是定义工作线程的结构和线程池结构,声明相关的函数,如创建函数。

#ifndef ...
read more

[c]生产者消费者模式实现

2014-04-19 by muzi

前言

本文主要内容是:使用多线程,运行生产者函数和消费者函数,去实现队列(临界区)的读写操作。

其意义在与熟悉多线程的互斥过程。生产者消费者模式是最好,最简单的选择。

数据结构

首先我们要操作的数据结构是队列。那么我首先要构造一个队列:

queue.h

#ifndef _QUEUE_
#define _QUEUE_


typedef struct _QUEUE_
{
    int maxsize;
    int buffer[10];  //bad design
    int end;
    int begin;

}queue_t;

void queue_init(queue_t* queue); //队列的初始化。如end,beginmaxsize的设置。
int get_len(queue_t* queue);     //获取队列的长度
void ...
read more