XBOX Gateway for System Link Games 1. INTRODUCTION XBOXGW is an application that was developed to expand the capabilities of System Link games for the Microsoft XBOX. The basic functionality of this program is very similar to an ethernet bridge. This one just happens to be smart enough to only bridge XBOX game traffic, and to split it up to the right players as to not take unnessisary bandwidth. Many people have stated that you can just set up VPN between several computers to get this to work. There are two very big issues with doing so, compared to using this software: 1) You would need to run BCP (Bridge Control Protocol) over the top of PPP, which would then need to run in L2TP (Layer 2 tunnel protocol), and then that would then be encapsulated in some type of VPN packet (ECP or something). The major drawback here, is that I do not know of any freeware VPN solutions that support L2TP, let alone BCP inside of PPP (which requires L2TP). You would have to buy a VPN solution to do this. Plus, the knowledge required to setup a VPN tunnel is a nightmare. 2) The next big reason this isn't a great idea, is because of bandwidth utilization. First off, with all of these extra headers, each XBOX game packet would take up double its current size (around 130 - 160 bytes). Also, if you attempted to play more than two (1 to 1) players, then it would really kill Jbandwidth, as it would mesh (bridge to everywhere) all traffic. This isn't needed, since with the "System Link" games, one console is a server, and all other clients only need to talk to that one server, not to eachother. Thus, this would be another huge waste of bandwith. And this is why we creatd XBOXGW. It does something very similar, but in a much cleaner and more efficient fashion. 2. REQUIREMENTS A Microsoft XBOX, of course! XBOXGW currently only runs on Linux. It is packages in RPM (RedHat Package Management) format. It should install on any linux distro that supports these packages. the XBOXGW package itself requires another package called HMLIBS, which you can get from our web site, at http://www.xboxgw.com/ Because of the amount of traffic these games generate, a Broadband Internet connection is required. Please see Section 4, WHATS TESTED, for various results on cable and dsl connections. Since XBOXGW is very similar to a bridge, is requires a promiscuous network. A promiscuous network means that the Linux box where XBOXGW is running, must be able to receive all LAN packets. This requires that the ethernet network between the Linux Box and your XBOX must be on a HUB or a cross-over cable. If your network is currently using an Ethernet Switch, we suggest that you buy another network card for your Linux machine and a cross-over cable from your local computer store. You can hook the XBOX directly into the new network card via the cross-over cable, and configure XBOXGW to look for the XBOX on the second network card. If you have a firewall or run NAT, you must open up your firewall to allow the following ports. Inbound: TCP port 7601 (Only required for server mode) Inbound: UDP port 7602 (Required for client and server) Outbound: TCP port 7601 (Only required for client mode) Outbound: UDP port 7602 (Required for client and sever) Source ports can be NAT'd, that is OK. These ports can be changed in the XBOXGW configuration explained below. 3. SUPPORT XBOXGW is unofficially supported. If you have any questions or problems, you can e-mail them to support@xboxgw.com. Please note that we do NOT support,or offer help with the installation of a second ethernet card. All questions regarding a second ethernet card, unless how to configure XBOXGW for it, will be ignored. XBOXGW is currently available for Linux on x86. We are currently working on adding support for Linux on PowerPC and BSD (MAC OS X). PLEASE NOTE: When sending questions to support@xboxgw.com, please include the output of the following commands, along with a detailed description of your problem. If possible, also attached config file /etc/xboxgw.xml to your e-mail: rpm -qi hmlibs rpm -qi xboxgw xboxgw -v xboxgw -c xboxgw -s uname -a 4. WHATS TESTED Currently the only XBOX System Link game that has been tested with XBOXGW is HALO. This is the only game currently "unofficially" supported. We have tested XBOXGW on RedHat 7.0 (Linux 2.2.16) on x86, RedHat 7.2 (Linux 2.4.7-10) on x86. When testing with the server on a cable modem, we found that at two players (One remote box), it pretty much maxed out the up stream of the cable modem. Adding a third play (second remote box), we would start seeing lag. When testing with the server on a DSL connection, we were able to connect all four boxes (three remote) without any lag. Every now and then, the game would freez for a second or so. 5. INSTALLATION Download the two following RPM packages from http://www.xboxgw.com/ hmlibs-.i386.rpm xboxgw-.i386.rpm Once you have these, you can run this command on your Linux box. You must be ROOT when running this command. You must also be root whenever running or maintaining any of the XBOXGW stuff. rpm -ivh hmlibs-.i386.rpm xboxgw-.i386.rpm Once this is complete, you are ready to configure it. Please see the next section for this. The RPM package also installs this document into /usr/local/doc/xboxgw.txt 6. CONFIGURATION XBOXGW Configuration can be done two ways. The easy method of configuration, is by running the command: xboxgw -c This will display all the current configuration and allow you to modify it. For the more daring users, the configuration is kept in XML format, and can be manually edited by editing the file /etc/xboxgw.xml Here is a quick description of each configuration option: Global Information: Interface This is the ethernet interface (i.e. eth0) in Linux, in which the XBOX resides on. Initial Debug: This is primarally for our use. This sets the default debug flags turned on when running the daemon in interactive mode. For more information on this, please see the Troubleshooting section. Ping Interval: When in client mode, TCP Control pings are sent every N seconds. These will report a round trip PING time. Note that this ping time will normally be higher than a standard unix ping. This is due to the fact that it is a TCP ping, thus three packets are involved instead of two. This more closely shows the latency the game is seeing. CLI Port: This is the port that the cli client uses to talk to the daemon running. You should leave this port alone, unless for some reason that port is already being used by some other application on your Linux box. Server Control Port; This is the TCP port used between XBOXGW Client and Servers to communicate between each other and exchange information Server Game Port: This is the port on the server side, which XBOXGW Clients will send all game traffic to. This is a UDP port. Client Game Port: This is the port on the client side, which XBOXGW Servers will send all game traffic to. This is a UDP port. Server Game Protocol: Currently only UDP is supported. We plan to impliment TCP in the future, to allow users to get around firewall/nat issues regarding UDP packets. Server Password: When blank (), no password is required to connect to you when you are in server mode. If a password is specified, all clients must have the same password in their server profile. Server Information (For each server profile added): Address: IP Address of server. When editing the XML file manually, you must put the IP ADDRESS here, not a hostname. When using the configuration tool, you can specify a hostname. Control Port: The TCP Control Port that server is configured for Game Port: The UDP Game Port that server is confgured for Game Protocol: Currently on UDP is supported (See Server Game Protocol above for more details) Password: When blank (), no password will be sent. This is required if the server is requiring a password for a connection. 7. USAGE Once you have a client and server configured, use these following steps to bring them up and on-line. SERVER SIDE: (NOTE: The Server Side MUST Start the game on the XBOX) You must start the XBOXGW Daemon in server mode. To do this, as root, enter the following command: xboxgwd -s CLIENT SIDE: (NOTE: The Client Side MUST JOIN a game on the XBOX) You must start the XBOXGW Daemon and tell it which server profile to connect too. To do this, as root, enter the following command: xboxgwd It will report an error if it cannot connect to the servers control port. To check the status at any given time, on either side, you can use the command: xboxgw -s or... xboxgw status When you are ready to tear down the link, simply issue the command: xboxgw -d on both sides. Once starting the XBOXGW daemon on both sides, if you are having trouble getting a game to work, please see our Troubleshooting section. 8. TROUBLESHOOTING There are some obvious things that may go wrong when attempting to bring up a link with a remote user. The two main ones are: 1) Firewall issues 2) Ethernet switch between XBOX and Linux Server instead of a HUB. We have attempted to make it very easy to detect both of these problems. The first step in troubleshooting a connection, so to get the output of this command from both sides: xboxgw -s (or xboxgw status) With this output, you can verify the following fields look correct: Mode: CLIENT - In Client Mode SERVER - In Server Mode Your X-BOX MAC - This is the detected MAC address of your X-BOX. If this is all 00's, then your X-BOX hasn't been detected yet. State: Connected - This means the remote side has connected, but has not sent a registeration packet yet. If stuck in this state, it is suggested to bring down and back up the remote link. If this does not help, please contact support@xboxgw.com Registered - This means the remote side has registered, however the UDP Game Port test has not passed yet Active - This means the remote side has registered, and that the UDP Game Port test has passed. Bad Password - This means the remote side attemptd to register, but did not have the correct password Stage: Unknown - No packets have been seen from an XBOX yet, on the local network configured Broadcast - The "game stage" is in its Broadcast stage. This is where its either looking for players, or a game Point-To-Point - The XBOX has entered a stage where it is talking directly to another XBOX, no more broadcasts. **NOTE** This stage is most useful in detecting whether you have an ethernet switch or an ethernet hub. If the stage goes to Broadcast, and never goes Point-To-Point when you attempt to join a game, then it is more than likely because you have a switch, or the xbox is not directly connected to your linux box. For more details on how to solve this issue, please see the REQUIREMENTS section of this document. Type: This is for our use in troubleshooting problems. X-BOX MAC: This is the MAC address of the XBOX on the remote network UDP Test: Passed - The UDP test has passed (This side has received a UDP pkt). Failed - This side has not received a UDP packet yet. **NOTE** This stage is most useful in detecting firewall problems. This test MUST be in "Passed" state on BOTH the client side, and the server side. Whatever side shows failed, means it did not receive a UDP packet from the remote side. Its firewall should be checked. Packets Received: Number of packets received from remote side Packages Sent: Number of packets sent to remote side Pings: Number of pings sent/received from remote side Last Ping: The time of the last ping. If none of the above information helps you troubleshoot your probem, please capture the output of the following commands, and e-mail them to support@xboxgw.com with a detailed description of your problem. rpm -qi hmlibs rpm -qi xboxgw xboxgw -v xboxgw -c xboxgw -s uname -a These should be captured from BOTH sides..