- Details
 
	- 
				Category: XenServer		
 
	- 
	Created on Thursday, 06 February 2014 19:48	
 
	- 
				Written by Tomasz Zdunek		
 
	
	In this article I would like to present how it is possible to re-compile kernel for Xenserver 6.0 to enable WIFI support. It is also required to have some additional components installed and re-compile.
 
	Exlude Xenserver packages, to prevent overriding them.
# vi /etc/yum.conf
exclude=xen* xenapi* open-iscsi* PyPAM* SDL* biosdevname* device-mapper-multipath* dhclient* dhcp* directfb* fbi* gdisk* hwdata* iproute* kernel-firmware* kernel-xen* kpartx* likewise-open* lvm2* md3000-rdac* mkinitrd* nash* net-snmp* net-snmp-libs* pam* python-simplejson* sm* splashy* syslinux* upgrade-plugin* vhostmd* vncsnapshot* xcp-python-libs* xenserver-lsb* xsconsole* SysVinit* initscripts*
	Add the default CentOs repository, instead the one provided by Citrix.
# rm -f /etc/yum.repos.d/CentOS-Base.repo  
# mv /etc/yum.repos.d/CentOS-Base.repo.orig  /etc/yum.repos.d/CentOS-Base.repo
	The URL of repository defined under CentOS-Base.repo.orig could be expired.
	In that case just refer to the to the CentOS Vault or other mirrors
# yum update
# yum install gcc make m4 ncurses-devel rpm-build redhat-rpm-config wireless-tools nano screen mc openssl-devel
	Install the source package of the kernel found under XenServer-6.0.0-source-1.iso\kernel-dom0\ of XenServer source ISO.
# rpm -i kernel-2.6.32.12-0.7.1.xs6.0.0.529.170661.src.rpm
	The source ISO can be found here: http://xenserver.org/overview-xenserver-open-source-virtualization/download.html
	Compile the kernel sources
# cd /usr/src/redhat/SOURCES/SPEC
# screen -dm "rpmbuild -bb kernel-xen.spec --target=i686  --without kabichk"
# rpm -i /usr/src/redhat/RPMS/i686/kernel-xen-2.6.32.12-0.7.1.xs6.0.0.529.170661.i686.rpm --force
# ln -s ./redhat/BUILD/kernel-2.6.32.12/linux-2.6.32.12-0.7.1.xs6.0.0.529.170661xen/ ./linux
# ln -s ./redhat/BUILD/kernel-2.6.32.12/linux-2.6.32.12-0.7.1.xs6.0.0.529.170661xen/ /lib/modules/2.6.32.12-0.7.1.xs6.0.0.529.170661xen/build
	Re-compile libnl with applied patch for it
# mkdir -p /usr/src/apps/libnl
# wget http://www.infradead.org/~tgr/libnl/files/libnl-1.1.tar.gz
# tar -C /usr/src/apps/libnl -xzvf libnl-1.1.tar.gz
	 
--- libnl-1.0/lib/route/link/vlan.c.orig        2008-01-16 22:59:21.000000000 -0800
+++ libnl-1.0/lib/route/link/vlan.c     2008-01-16 22:59:36.000000000 -0800
@@ -27,6 +27,9 @@
 #include <netlink/route/link/vlan.h>
 #include <linux/if_vlan.h>
+#ifndef VLAN_FLAG_REORDER_HDR
+#define VLAN_FLAG_REORDER_HDR 0x01
+#endif
 /** @cond SKIP */
 #define VLAN_HAS_ID            (1<<0)" > /usr/src/apps/libnl/01-missing_declaration.patch
	 
# patch -p1 /usr/src/apps/libnl < /usr/src/apps/libnl/01-missing_declaration.patch
# ./configure; make; make prefix=/usr install
	Compat-wireless kernel module for wifi
# wget http://www.orbit-lab.org/kernel/compat-wireless-2.6-stable/v2.6.32/compat-wireless-2.6.32.16.tar.bz2
# tar -C /usr/src/apps/compat-wireless -xjvf compat-wireless-2.6.32.16.tar.bz2
# cd /usr/src/apps/compat-wireless
# ./scripts/driver-select ath5k
# make; make install; modporbe ath5k
	Compile hostapd
# wget http://hostap.epitest.fi/releases/hostapd-0.7.3.tar.gz
# tar -C /usr/src/apps/hostapd -xzvf hostapd-0.7.3.tar.gz
# cd /usr/src/apps/hostapd/hostapd
# make; make install
# chmod +x /etc/init.d/hostapd
# chkconfig --add hostapd
	Add new interface to the XenServer
# xe host-list params=uuid
# xe pif-scan host-uuid=<UUID>
	At this point we should have wifi working and seen under XenServer from Management Console. Ofcourse if we want to have fully working wifi in the Access Point mode, we need to configure and run hostapd service.