From owner-freebsd-net@FreeBSD.ORG Tue Apr 21 04:30:33 2015 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 0A6EA277 for ; Tue, 21 Apr 2015 04:30:33 +0000 (UTC) Received: from mail-la0-x231.google.com (mail-la0-x231.google.com [IPv6:2a00:1450:4010:c03::231]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6E6D4A5F for ; Tue, 21 Apr 2015 04:30:32 +0000 (UTC) Received: by lagv1 with SMTP id v1so142248311lag.3 for ; Mon, 20 Apr 2015 21:30:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=W1gRLNYmRGxR5XIiSacBOGRKSGVlTheYOP2dhv6G4CM=; b=H5TNGcd/6d0CIFBM8SJLZMJiWwihE/at+P8AzTsMGnJsIfTVRFPA4Wtae8Bt9YHZay iW1pAswmgi1pcPaRT9ygYU9oscIu1FpwsUFVtbR9IQOHSRoclco31KGHrRO0oz2k2qAX nTJl7ZVxlKBtA5gZqSnK4eO81AP5RWgqf4IIHv5B9E50oCs4ZQs/E3QdKmqR+hjqGOOk rR2RChUTt7k6+UHBIOjIvZLLaB6IH4zp5rm9Yya9T97DDrVE1jOkldySeCnHH8BcPqax jqU/tIv6LJzS47d6sHzjPGwAOeLIoM6tzB6M+t4QyzMtMQ+JtRVu6znIUHHdxmeYQGxK e0Yg== MIME-Version: 1.0 X-Received: by 10.152.116.49 with SMTP id jt17mr10027127lab.82.1429590630346; Mon, 20 Apr 2015 21:30:30 -0700 (PDT) Received: by 10.114.202.229 with HTTP; Mon, 20 Apr 2015 21:30:30 -0700 (PDT) In-Reply-To: <5535945F.90504@swin.edu.au> References: <5535945F.90504@swin.edu.au> Date: Tue, 21 Apr 2015 07:30:30 +0300 Message-ID: Subject: Re: Congestion Control Modification From: Karlis Laivins To: grenville armitage Cc: freebsd-net@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Apr 2015 04:30:33 -0000 Hi, Thank you very much for such a comprehensive description of how to properly create a loadable Kernel module, this does the trick - I was able to create the module successfully, load it into Kernel and set it as the congestion control algorithm used via sysctl net.inet.tcp.cc.algorithm=new (new - the name of my test module). Best Regards, Karlis On Tue, Apr 21, 2015 at 3:05 AM, grenville armitage wrote: > Hi, > > > On 04/18/2015 16:59, Karlis Laivins wrote: > >> Hello, >> >> I have read an interesting publication about a proposed modification of >> TCP >> Congestion Control algorithm that would allow to improve it (the CC) by >> dynamic bandwidth estimation. The idea seems so interesting that I would >> like to try to implement it by modifying the NewReno code. >> >> Do I understand correctly that to do the above stated, I would create a >> copy of source file (in my case - cc_newreno.c) located in /usr/src/sys/ >> and rename it to, for example, cc_newreno_test.c and make changes to it? >> How would I then compile it, and how would I create a newreno_test.ko file >> that can be loaded into Kernel and tested? >> >> Thank you in advance for your answers! >> > > In case this helps shed some (probably incomplete) light, here are the > steps > I took late last year to make a modified version of NewReno: > > I start with copying the newreno module under sys/netinet/cc/cc_newreno.c > as a template. The new source file will be called newrenoVarBeta.c > > /usr/src/sys/netinet/cc % cp cc_newreno.c cc_newrenoVarBeta.c > /usr/src/sys/netinet/cc % > > Then create a modules definition based on /usr/src/sys/modules/cc/cc_cubic > (because there isn't one for newreno per se) > > /usr/src/sys/netinet/cc % cd /usr/src/sys/modules/cc > /usr/src/sys/modules/cc % mkdir cc_newrenoVarBeta > /usr/src/sys/modules/cc % cp cc_cubic/Makefile cc_newrenoVarBeta/ > /usr/src/sys/modules/cc % > > Tweak the cc_newrenoVarBeta/Makefile to say: > > KMOD= cc_newrenoVarBeta > SRCS= cc_newrenoVarBeta.c > > Made my changes to cc_newrenoVarBeta.c (including changing the module's > name from 'newreno' to something else) > > Then built/installed the new module with: > > /usr/src/sys/netinet/cc % cd /usr/src/sys/modules/cc/cc_newrenoVarBeta > /usr/src/sys/modules/cc % make clean && make && make install > [..build and install output..] > /usr/src/sys/modules/cc % > > All being well, cc_newrenoVarBeta.ko should now exist under /boot/kernel > > Then use 'kldload cc_newrenoVarBeta.ko' to load your new CC algorithm > > If all goes well, your new module will appear (with whatever name you gave > it) in the sysctl net.inet.tcp.cc.available list. Don't forget to actually > select your new module with sysctl net.inet.tcp.cc.algorithm when running > experiments. > > cheers, > gja > > > > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" >