原创 open vswitch研究:openflow I

關於openflow的規範不是本文討論範疇,這篇主要討論OVS對openflow的支持,代碼基本都在ofproto/目錄下 struct ofproto代表了一個openflow switch的模型,是一個"接口類" struct ofp

原创 open vswitch研究:基本數據結構

hmap /* A hash map. */ struct hmap {     struct hmap_node **buckets; /* Must point to 'one' iff 'mask' == 0. */     st

原创 open vswitch研究: action

ovs的action,都是預定義好的行爲,也可以用nlattr結構來定義, enum ovs_action_attr {     OVS_ACTION_ATTR_UNSPEC,     OVS_ACTION_ATTR_OUTPUT,  

原创 xen網絡前端驅動代碼分析(發送篇)

發送的核心函數爲 xennet_start_xmit static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev) {     unsigned sh

原创 open vswitch研究:utility

stream struct pstream {     const struct pstream_class *class;     char *name; }; pstream_class是一個類似的接口類,其實現根據底層socket

原创 linux內核網絡協議棧學習筆記:vlan

這篇是我臨時加的,本來不打算放在整個內核協議棧分析的系列裏的,但我現在覺得vlan還是蠻重要的,而且討論vlan源碼的文章很少,不知道我這篇算不算第一篇 :D vlan的代碼都在net/8021q/的內核目錄下,首先我們來看8021q模塊

原创 open vswitch研究: ovsdb

ovsdb/SPEC文件定義了ovsdb的表規範,創建一個db時,需要預先準備好一個schema文件,該文件是一個JSON格式的字符串,定義了db名字,包含的所有表;每張表都包含一個columns的JSON dict,通過這個schema

原创 open vswitch研究:flow

struct sw_flow_key 用來唯一定義一個flow,該結構相當複雜,請參考源碼 sw_flow_key分爲四部分,分別代表switch, L2, L3, L4的profile switch的profile是一個struct p

原创 linux內核網絡協議棧學習筆記(6)

本篇討論IP包的收發(暫不包括路由) 先來看inet_init, 首先是調用proto_register,註冊了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各種slab_c

原创 top顯示的內存各項參數解析

top觀察進程數據時,會有如下幾個內存參數(可以用f選擇顯示哪些參數): VIRT, RES, SHR, SWAP, CODE, DATA top實際上是從/proc/<pid>/statm文件中讀取這些信息,/proc/<pid>/s

原创 linux通過tc控制網絡QoS(2)

先來看下traffic control在內核裏是如何實現的,首先內核在發送數據時,最終會調用到dev_queue_xmit,     struct Qdisc *q     if (q->enqueue) {         rc = _

原创 open vswitch研究:datapath

struct vport是OVS的設備結構,個人認爲非常類似於kernel裏的netdev結構 /**  * struct vport - one port within a datapath  * @rcu: RCU callback

原创 LVS源碼分析(1)

由於要做一個類似LVS的包轉發模塊,研究了LVS的架構和代碼,下面這個系列會做一個總結。首先推薦下這個blog http://yfydz.cublog.cn 裏面對LVS, IPSec的講解非常不錯 幾個重要的數據結構如下: ip_vs_

原创 轉一篇文章,比較kmalloc/vmalloc/get_free_pages

對於提供了MMU(存儲管理器,輔助操作系統進行內存管理,提供虛實地址轉換等硬件支持)的處理器而言,Linux提供了複雜的存儲管理系統,使得進程所能訪問的內存達到4GB。 進程的4GB內存空間被人爲的分爲兩個部分--用戶空間與內核空間。

原创 xen網絡前端驅動代碼分析(接收篇)

我們以RHEL6的xen netfront前端驅動爲例。RHEL5的前端驅動,有一個acceleration的特性,是由一家叫solarflare的公司爲其網卡定製的plugin,基本架構就是直接從網卡拿了包扔給虛擬機,不經過網橋,當然這