コード例 #1
0
    def net_config(self,
                   data_ip=None,
                   data_port=None,
                   dest_ip=None,
                   dest_port=None):
        """
        net_config(self, data_i = None, data_port = None, dest_ip = None, dest_port = None)

        This function overrides the base class Backend net_config for a
        CoDD backend. If the CoDD backend is master, it will program the
        roach for output on 8 adapters, as configured in the config
        file.
        """
        # Only the master will have self.roach != None
        if self.roach:

            def tap_data(ips, gigbit_name):
                rvals = []

                for i in range(0, len(ips)):
                    tap = "tap%i" % i
                    gbe = gigbit_name + '%i' % i
                    bank = "BANK" + chr(65 + i)
                    ip = self._ip_string_to_int(ips[bank])
                    mac = self.bank.mac_base + ip
                    port = self.bank.dataport
                    rvals.append((tap, gbe, mac, ip, port))
                return rvals

            gigbit_name = self.mode.gigabit_interface_name
            dest_ip_register_name = self.mode.dest_ip_register_name
            dest_port_register_name = self.mode.dest_port_register_name

            taps = tap_data(self.mode.cdd_roach_ips, gigbit_name)

            for tap in taps:
                self.roach.tap_start(*tap)

            hpcs = self.mode.cdd_hpcs

            for i in range(0, len(hpcs)):
                ip_reg = dest_ip_register_name + '%i' % i
                pt_reg = dest_port_register_name + '%i' % i
                dest_ip = self.mode.cdd_hpc_ip_info[i][0]
                dest_port = self.mode.cdd_hpc_ip_info[i][1]
                self.roach.write_int(ip_reg, dest_ip)
                self.roach.write_int(pt_reg, dest_port)

            # now set up the arp tables:
            regs = [
                gigbit_name + '%i' % i
                for i in range(len(self.mode.cdd_roach_ips))
            ]
            set_arp(self.roach, regs, self.hpc_macs)

        return 'ok'
コード例 #2
0
    def net_config(self, data_ip=None, data_port=None, dest_ip=None, dest_port=None):
        """
        net_config(self, data_i = None, data_port = None, dest_ip = None, dest_port = None)

        This function overrides the base class Backend net_config for a
        CoDD backend. If the CoDD backend is master, it will program the
        roach for output on 8 adapters, as configured in the config
        file.
        """
        # Only the master will have self.roach != None
        if self.roach:

            def tap_data(ips, gigbit_name):
                rvals = []

                for i in range(0, len(ips)):
                    tap = "tap%i" % i
                    gbe = gigbit_name + "%i" % i
                    bank = "BANK" + chr(65 + i)
                    ip = self._ip_string_to_int(ips[bank])
                    mac = self.bank.mac_base + ip
                    port = self.bank.dataport
                    rvals.append((tap, gbe, mac, ip, port))
                return rvals

            gigbit_name = self.mode.gigabit_interface_name
            dest_ip_register_name = self.mode.dest_ip_register_name
            dest_port_register_name = self.mode.dest_port_register_name

            taps = tap_data(self.mode.cdd_roach_ips, gigbit_name)

            for tap in taps:
                self.roach.tap_start(*tap)

            hpcs = self.mode.cdd_hpcs

            for i in range(0, len(hpcs)):
                ip_reg = dest_ip_register_name + "%i" % i
                pt_reg = dest_port_register_name + "%i" % i
                dest_ip = self.mode.cdd_hpc_ip_info[i][0]
                dest_port = self.mode.cdd_hpc_ip_info[i][1]
                self.roach.write_int(ip_reg, dest_ip)
                self.roach.write_int(pt_reg, dest_port)

            # now set up the arp tables:
            regs = [gigbit_name + "%i" % i for i in range(len(self.mode.cdd_roach_ips))]
            set_arp(self.roach, regs, self.hpc_macs)

        return "ok"
コード例 #3
0
    def net_config(self, data_ip = None, data_port = None, dest_ip = None, dest_port = None):
        """net_config(self, roach_ip = None, port = None)

        Configures the 10Gb/s interface on the roach.  This consists of
        sending the tap-start katcp command to initialize the FPGA's
        10Gb/s interface, and updating a couple of registers on the
        ROACH2 with the destination IP address and port of the HPC
        computer.

        All the parameters to this function have 'None' as default
        values; if any is ommitted from the call the function will use
        the corresponding value loaded from the configuration file.

        *data_ip:*
          The IP address. Can be a string (ie '10.17.0.71'), or
          an integer of the same value (for that IP, it would be
          168886343) If given as a string, is converted to the integer
          representation.

        *data_port:*
          The ROACH 10Gb/s port number. An integer with a
          16-bit value; that is, not to exceed 65535.

        *dest_ip:*
          the IP address to send packets to; this is the 10Gb/s
          IP address of the HPC computer. Same format as 'data_ip'.

        *dest_port:*
          The 10Gb/s port on the HPC machine to send data
          to.

        """

        # don't do this if unit testing.
        if self.test_mode:
            return
        # don't do this if we don't control a roach, as can happen in
        # GUPPI CODD modes.
        if not self.roach:
            return

        if data_ip == None:
            data_ip = self._ip_string_to_int(self.bank.datahost)
        else:
            data_ip = self._ip_string_to_int(data_ip)

        if data_port == None:
            data_port = self.bank.dataport

        if dest_ip == None:
            dest_ip = self._ip_string_to_int(self.bank.dest_ip)
        else:
            dest_ip = self._ip_string_to_int(dest_ip)

        if dest_port == None:
            dest_port = self.bank.dest_port

        if type(data_ip) != int or type(data_port) != int \
                or type (dest_ip) != int or type (dest_port) != int \
                or data_port > 65535 or dest_port > 65535:
            raise Exception("Improperly formatted IP addresses and/or ports. "
                            "IP must be integer values or dotted quad strings. "
                            "Ports must be integer values < 65535.")

        gigbit_name = self.mode.gigabit_interface_name
        dest_ip_register_name = self.mode.dest_ip_register_name
        dest_port_register_name = self.mode.dest_port_register_name

        self.roach.tap_start("tap0", gigbit_name,
                             self.bank.mac_base + data_ip, data_ip, data_port)
        self.roach.write_int(dest_ip_register_name, dest_ip)
        self.roach.write_int(dest_port_register_name, dest_port)
        regs = [gigbit_name]
        time.sleep(1)
        set_arp(self.roach, regs, self.hpc_macs)

        return 'ok'
コード例 #4
0
ファイル: Backend.py プロジェクト: nrao/FLAG-Beamformer-Devel
    def net_config(self, data_ip = None, data_port = None, dest_ip = None, dest_port = None):
        """net_config(self, roach_ip = None, port = None)

        Configures the 10Gb/s interface on the roach.  This consists of
        sending the tap-start katcp command to initialize the FPGA's
        10Gb/s interface, and updating a couple of registers on the
        ROACH2 with the destination IP address and port of the HPC
        computer.

        All the parameters to this function have 'None' as default
        values; if any is ommitted from the call the function will use
        the corresponding value loaded from the configuration file.

        *data_ip:*
          The IP address. Can be a string (ie '10.17.0.71'), or
          an integer of the same value (for that IP, it would be
          168886343) If given as a string, is converted to the integer
          representation.

        *data_port:*
          The ROACH 10Gb/s port number. An integer with a
          16-bit value; that is, not to exceed 65535.

        *dest_ip:*
          the IP address to send packets to; this is the 10Gb/s
          IP address of the HPC computer. Same format as 'data_ip'.

        *dest_port:*
          The 10Gb/s port on the HPC machine to send data
          to.

        """

        # don't do this if unit testing.
        if self.test_mode:
            return
        # don't do this if we don't control a roach, as can happen in
        # GUPPI CODD modes.
        if not self.roach:
            return

        if data_ip == None:
            data_ip = self._ip_string_to_int(self.bank.datahost)
        else:
            data_ip = self._ip_string_to_int(data_ip)

        if data_port == None:
            data_port = self.bank.dataport

        if dest_ip == None:
            dest_ip = self._ip_string_to_int(self.bank.dest_ip)
        else:
            dest_ip = self._ip_string_to_int(dest_ip)

        if dest_port == None:
            dest_port = self.bank.dest_port

        if type(data_ip) != int or type(data_port) != int \
                or type (dest_ip) != int or type (dest_port) != int \
                or data_port > 65535 or dest_port > 65535:
            raise Exception("Improperly formatted IP addresses and/or ports. "
                            "IP must be integer values or dotted quad strings. "
                            "Ports must be integer values < 65535.")

        gigbit_name = self.mode.gigabit_interface_name
        dest_ip_register_name = self.mode.dest_ip_register_name
        dest_port_register_name = self.mode.dest_port_register_name

        self.roach.tap_start("tap0", gigbit_name,
                             self.bank.mac_base + data_ip, data_ip, data_port)
        self.roach.write_int(dest_ip_register_name, dest_ip)
        self.roach.write_int(dest_port_register_name, dest_port)
        regs = [gigbit_name]
        time.sleep(1)
        set_arp(self.roach, regs, self.hpc_macs)

        return 'ok'