<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[徐维溢的博客]]></title><description><![CDATA[临渊羡鱼，退而织网]]></description><link>https://blog.youkuaiyun.com/u014600842</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u014600842]]></copyright><item><title><![CDATA[linux网络协议栈br_handle_frame_finish]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/124045737</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/124045737</guid><author>u014600842</author><pubDate>Fri, 08 Apr 2022 17:01:50 +0800</pubDate><description><![CDATA[/* note: already called with rcu_read_lock */
int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
{
	const unsigned char *dest = eth_hdr(skb)-&gt;h_dest;
	struct net_bridge_port *p = br_port_get_rcu(skb-&gt;dev);
	struct net..]]></description><category></category></item><item><title><![CDATA[uboot 【board_init_r】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/123558442</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/123558442</guid><author>u014600842</author><pubDate>Thu, 17 Mar 2022 19:44:45 +0800</pubDate><description><![CDATA[void board_init_r(gd_t *new_gd, ulong dest_addr)
{
#ifdef CONFIG_NEEDS_MANUAL_RELOC
	int i;
#endif

#if !defined(CONFIG_X86) &amp;&amp; !defined(CONFIG_ARM) &amp;&amp; !defined(CONFIG_ARM64)
	gd = new_gd;
#endif

#ifdef CONFIG_NEEDS_MANUAL_RELOC
	for (i ..]]></description><category></category></item><item><title><![CDATA[uboot 【board_init_f】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/123400617</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/123400617</guid><author>u014600842</author><pubDate>Thu, 17 Mar 2022 17:54:29 +0800</pubDate><description><![CDATA[void board_init_f(ulong boot_flags)
{
#ifdef CONFIG_SYS_GENERIC_GLOBAL_DATA
	/*
	 * For some archtectures, global data is initialized and used before
	 * calling this function. The data should be preserved. For others,
	 * CONFIG_SYS_GENERIC_GLOBAL_DATA ..]]></description><category></category></item><item><title><![CDATA[linux网络协议栈neigh_update]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/115691880</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/115691880</guid><author>u014600842</author><pubDate>Wed, 14 Apr 2021 10:26:17 +0800</pubDate><description><![CDATA[/* Generic update routine.
   -- lladdr is new lladdr or NULL, if it is not supplied.
   -- new    is new state.
   -- flags
	NEIGH_UPDATE_F_OVERRIDE allows to override existing lladdr,
				if it is different.
	NEIGH_UPDATE_F_WEAK_OVERRIDE will suspect...]]></description><category></category></item><item><title><![CDATA[linux网络协议栈neigh_periodic_work]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/115668105</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/115668105</guid><author>u014600842</author><pubDate>Tue, 13 Apr 2021 15:07:00 +0800</pubDate><description><![CDATA[static void neigh_periodic_work(struct work_struct *work)
{
	struct neigh_table *tbl = container_of(work, struct neigh_table, gc_work.work);
	struct neighbour *n;
	struct neighbour __rcu **np;
	unsigned int i;
	struct neigh_hash_table *nht;

	NEIGH_CACHE..]]></description><category></category></item><item><title><![CDATA[linux网络协议栈neigh_timer_handler]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/115654992</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/115654992</guid><author>u014600842</author><pubDate>Tue, 13 Apr 2021 13:34:44 +0800</pubDate><description><![CDATA[/* Called when a timer expires for a neighbour entry. */

static void neigh_timer_handler(unsigned long arg)
{
	unsigned long now, next;
	struct neighbour *neigh = (struct neighbour *)arg;
	unsigned int state;
	int notify = 0;

	write_lock(&amp;neigh-&gt..]]></description><category></category></item><item><title><![CDATA[linux网络协议栈arp_process]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/115632104</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/115632104</guid><author>u014600842</author><pubDate>Mon, 12 Apr 2021 17:57:04 +0800</pubDate><description><![CDATA[/*
 *	Process an arp request.
 */

static int arp_process(struct sk_buff *skb)
{
	struct net_device *dev = skb-&gt;dev;
	struct in_device *in_dev = __in_dev_get_rcu(dev);
	struct arphdr *arp;
	unsigned char *arp_ptr;
	struct rtable *rt;
	unsigned char *s..]]></description><category></category></item><item><title><![CDATA[linux网络协议栈br_handle_frame]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/114842371</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/114842371</guid><author>u014600842</author><pubDate>Mon, 15 Mar 2021 17:53:54 +0800</pubDate><description><![CDATA[rx_handler_result_t br_handle_frame(struct sk_buff **pskb)
{
	struct net_bridge_port *p;
	struct sk_buff *skb = *pskb;
	const unsigned char *dest = eth_hdr(skb)-&gt;h_dest;
	br_should_route_hook_t *rhook;
    
    //本地环回包直接返回
	if (unlikely(skb-&gt;pkt_typ.]]></description><category></category></item><item><title><![CDATA[linux网络协议栈ip_rcv]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/114699689</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/114699689</guid><author>u014600842</author><pubDate>Fri, 12 Mar 2021 16:39:56 +0800</pubDate><description><![CDATA[int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
{
	const struct iphdr *iph;
	struct net *net;
	u32 len;
    
    //丢弃PACKET_OTHERHOST类型的包
	/* When the interface is in promisc. mode, drop all the.]]></description><category></category></item><item><title><![CDATA[linux网络协议栈__netif_receive_skb_core]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/114629007</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/114629007</guid><author>u014600842</author><pubDate>Wed, 10 Mar 2021 11:06:19 +0800</pubDate><description><![CDATA[static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc)
{
	struct packet_type *ptype, *pt_prev;
	rx_handler_func_t *rx_handler;
	struct net_device *orig_dev;
	bool deliver_exact = false;
	int ret = NET_RX_DROP;
	__be16 type;

	net_timest.]]></description><category></category></item><item><title><![CDATA[移植LLDP协议到mips架构设备]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/114366805</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/114366805</guid><author>u014600842</author><pubDate>Thu, 04 Mar 2021 14:38:09 +0800</pubDate><description><![CDATA[目的：移植LLDP协议到mips架构设备，实现基本的链路发现功能。

源码下载：

lldpd-master： https://github.com/lldpd/lldpd
	libevent：     https://github.com/libevent/libevent/tree/5df3037d10556bfcb675bc73e516978b75fc7bc7
交叉编译：

解压lldpd-master.zip
	将libevent-5df3037d10556bfcb675bc73e...]]></description><category></category></item><item><title><![CDATA[基于readline库，实现命令行补全和记录]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/73920825</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/73920825</guid><author>u014600842</author><pubDate>Thu, 29 Jun 2017 17:30:16 +0800</pubDate><description><![CDATA[#if 1
/* GNU Readline是一个跨平台开源程序库，提供交互式的文本编辑功能。应用程序借助该库函数，*/
/*允许用户编辑键入的命令行，并提供自动补全和命令历史等功能。Bash(Bourne Again Shell)、GDB/*
/*tp 和mail等程序就使用Readline库提供其命令行界面。*/




/*主要函数*/


char *readline(]]></description><category></category></item><item><title><![CDATA[python核心编程学习笔记【2016-10-13】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52802426</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52802426</guid><author>u014600842</author><pubDate>Thu, 13 Oct 2016 00:14:42 +0800</pubDate><description><![CDATA[@python 对象 
    #对象的3个特性 
    身份：使用内建函数id()得到 
    类型：type() 
    值：对象表示的数据项#所有标准对象均可用于布尔测试，同类型的对象之间可以比较大小。每个对象天生具有布 
尔 True 或 False 值。空对象、 值为零的任何数字或者 Null 对象 None 的布尔值都是 False。Python 提供了 is 和 is not]]></description><category></category></item><item><title><![CDATA[python核心编程学习笔记【2016-10-12】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52793509</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52793509</guid><author>u014600842</author><pubDate>Wed, 12 Oct 2016 00:36:01 +0800</pubDate><description><![CDATA[@第三章练习 
    #字符串格式化 不再抑制 readTextFile.py 中 print 语句生成的 NEWLINE 字符， 修改你的 
代码， 在显示一行之前删除每行末尾的空白。 这样， 你就可以移除 print 语句末尾的逗号了。 
提示： 使用字符串对象的 strip()方法 
s.strip(rm)        删除s字符串中开头、结尾处，位于 rm删除序列的字符 
s.lstri]]></description><category></category></item><item><title><![CDATA[python核心编程学习笔记【2016-10-08】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52773183</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52773183</guid><author>u014600842</author><pubDate>Mon, 10 Oct 2016 00:45:22 +0800</pubDate><description><![CDATA[@3.Python基础 
    #语句和语法 
    代码组由不同的缩进分隔 
    &*缩进四个空格宽度，避免使用制表符 
   #变量赋值 
   多元赋值 
    
    #专用下划线标识符 
     _xxx 不用’from module import *’导入 
    xxx系统定义名字 
    __xxx 类中的私有变量名 
    &避免用下划线作为变量名的开始模块结构]]></description><category></category></item><item><title><![CDATA[python中List的sort方法（或者sorted内建函数）的用法]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52752915</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52752915</guid><author>u014600842</author><pubDate>Fri, 07 Oct 2016 23:56:58 +0800</pubDate><description><![CDATA[python列表排序 

简单记一下python中List的sort方法（或者sorted内建函数）的用法。 

关键字： 
python列表排序 python字典排序 sorted 


List的元素可以是各种东西，字符串，字典，自己定义的类等。 

sorted函数用法如下： 


Python代码  



sorted(data, cmp=None, k]]></description><category></category></item><item><title><![CDATA[python核心编程学习笔记【2016-10-06】]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52752907</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52752907</guid><author>u014600842</author><pubDate>Fri, 07 Oct 2016 23:54:23 +0800</pubDate><description><![CDATA[@python起步 
    #程序输出，print语句以及“hello world” 
        $在交互式解释器中，可以使用print输出变量值，也可以仅使用变量名查看变量值，一下是关于字符串‘hello world’的一个例子： 
         
        ？？发现两者在输出字符串的时候存在差异，后者有单引号，这是为了让非字符串对象也能以字符串的方式显示在屏幕上－－即它显示的是]]></description><category></category></item><item><title><![CDATA[对linux_list中宏和函数的理解[part1 基本使用]]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/52711153</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/52711153</guid><author>u014600842</author><pubDate>Fri, 30 Sep 2016 14:34:09 +0800</pubDate><description><![CDATA[Part1 基本使用 
@1.宏 
     #1.offsetof 
    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 
          TYPE~结构体  
           MEMBER~结构体成员 
            (TYPE *)0)~ 把0地址强转为TYPE类型的结构体]]></description><category></category></item><item><title><![CDATA[关于数组名的思考和验证]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/50806322</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/50806322</guid><author>u014600842</author><pubDate>Sat, 05 Mar 2016 00:07:42 +0800</pubDate><description><![CDATA[1.数组名是指针么？建立一个二维数组，用sizeof进行验证。
#include
#include
using namespace std;
int main()
{
	char a[10][10];
    /*&a,a,a[0],&a[0],&a[0][0]那些是指针，那些不是指针，用sizeof进行验证*/
	printf("sizeof(&a) = %d\r\n",sizeo]]></description><category></category></item><item><title><![CDATA[数组与指针剖析]]></title><link>https://blog.youkuaiyun.com/u014600842/article/details/50806019</link><guid>https://blog.youkuaiyun.com/u014600842/article/details/50806019</guid><author>u014600842</author><pubDate>Fri, 04 Mar 2016 22:53:33 +0800</pubDate><description><![CDATA[数组与指针生来就是双胞胎，多数人就是从数组的学习开始指针的旅程的。在学习的过程中，很自然就会经常听到或见到关于数组与指针的各种各样的看法，下面我节选一些在各种论坛和文章里经常见到的文字：
 
“一维数组是一级指针”
“二维数组是二级指针”
“数组名是一个常量指针”
“数组名是一个指针常量”
........................
 
这些文字看起来非常熟悉吧？类似的文字还]]></description><category></category></item></channel></rss>