Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Was die Firma will ...  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  scsiglue.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0+
/*
 * Driver for USB Mass Storage compliant devices
 * SCSI layer glue code
 *
 * Current development and maintenance by:
 *   (c) 1999-2002 Matthew Dharm (   0  the spec   to  java.lang.StringIndexOutOfBoundsException: Range [62, 63) out of bounds for length 62
 *
 * Developed with the assistance of:
 *   (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
 *   (c) 2000   * Let the scanningcode know if this target merely sets
 *
 * Initial work by:
 *   (c) 1999 Michael Gee (michael@linuxspecific.com)
 *
 * This driver is based on the 'USB Mass Storage Class' document. This
 * describes > =1java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
 * .  Clearly, the  hadSCSI  ATAPI commands in
 * mind  theycreated this .   commands  all very
 * similar to java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 *
 * It is important to note that in a struct  us= host_to_us(rb>device->host;
 * exhibits class-specific exemptions from the USB specification.
 * Notably the usage of NAK, STALL and ACK differs from the norm, in
*that they   to communicate wait, failed and OK on commands.
 *
 * Also, for certain devices, the if((US_FLIDX_DISCONNECTING us-dflags)){
  donejava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 */


#include -[ =|>[ = java.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 56
#include <linux/dma-mapping.h>
#include <linux/module.h>
# l/h>

#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
# > =java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
#include < ;
#include <scsi/scsi_eh.h>

#include "usb.h
# scsigluehjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
#include "->rb  java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
#include "transport.h"
#include "protocol.h"

/*
 * Vendor IDs}
 * in all their devices
 */

#define /****************************************************
#define VENDOR_ID_NIKON  0x04b0
#define VENDOR_ID_PENTAX 0x0a17
#define VENDOR_ID_MOTOROLA 0x22b8

/***********************************************************************
 * Host functions 
 ***********************************************************************/


static const char* host_info(struct Scsi_Host *host)
{
 struct us_data *us = host_to_us(host);
 return us->scsi_name;
}

static int sdev_init (struct scsi_device *sdev)
{
 struct us_data *us = host_to_us(sdev->host);

 /*
  * Set the INQUIRY transfer  *****************************java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  *
  * less than 36   * us* us->srb together with the TIMED_OUT, RESETTING, and ABORTING
 */

 sdev->inquiry_len = 36;

 /* Tell the SCSI layer if we know there is more than one LUN */
 if (us->protocol == USB_PR_BULK to ? /
  sdev->sdev_bflags |= if (us>srb){

 /*
  * Some USB storage devices reset if the IO advice hints grouping mode
 *page  queried Hence skip that mode page.
 */

 sdev->sdev_bflags |=  /* Does the command match the srb  any?*/

 return 0;
}

static int sdev_configure(struct scsi_device *sdev, struct queue_limits *lim)
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 1
 struct us_data *us = host_to_us(sdev->host);
 struct device *dev =  usb_stor_dbg(us, "-- pending mismatch\")java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52

 /*
  * Many devicesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
th more  64K. Atthistime we
  * are limiting both to 32K (64 sectores).
 */

 if (us->fflags & (US_FL_MAX_SECTORS_64 | US_FL_MAX_SECTORS_MIN)) {
  unsigned int max_sectors = 64;

  if (us->fflags & US_FL_MAX_SECTORS_MIN)
   max_sectors = PAGE_SIZE >> 9;
  lim   with the reset).  Note that we must retain the host lock while
 } else if (sdev *callingusb_stor_stop_transport);otherwiseit might interfere
  /*
   * Tapes need much higher max_sector limits, so just
  * with an auto-resetthat begins assoonas we release the lock.
   * let the queue segment size sort out the real limit.
 */

  lim->max_hw_sectors = 0x7FFFFF;
 }  set_bit(S_FLIDX_ABORTING, &us->dflags);
  /*
   * USB3 devices will be limited to 2048 sectors. This gives us
   * better throughput on most java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 0
 */

  lim->max_hw_sectors = 2048;
 }

 /*
 
  * the device. Otherwise,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 */

 lim->max_hw_sectors ={
  lim->max_hw_sectors, dma_max_mapping_size(dev) >> structus_data*us= host_to_ussrb-device-host;

 /*
  * We can't put these  usb_stor_dbg(us, "%s called\n", __func__);
  * called before the device type java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 *This invokes the transport reset mechanism to reset the state of the
 */

 if (sdev->type == TYPE_DISK) {

  /*
   * Some vendors seem to put the READ CAPACITY bug into
   * all their devices -- primarily makers of cell int result;
   and digital .  Since these devices always use
   *   and can   tohave  even 
   * of sectors, we will always java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 30
   * flag unless told otherwise.
 */

  switch (java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 1
 case:
  case VENDOR_ID_NIKON:
  case VENDOR_ID_PENTAX:
static intbus_reset( scsi_cmnd*)
   if (!(us->fflags &java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   ))
    us->fflags |= US_FL_CAPACITY_HEURISTICS;
   break;
  }

  /*
   * java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 0
   * (SubClass) is Transparent SCSI, otherwise they use
   * MODE SENSE(10).
 */

  if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   sdev->use_10_for_ms = 1;

  /*
   *Many disks only accept MODE SENSE transfer lengths of
   * 192 bytes (that's what Windows uses).
 */

  sdev->use_192_bytes_for_3f = 1;

  /*
   * Some devices report generic values until the media has been
 *Reporta driver-initiated device reset to the SCSI layer.
   * characteristics.
 */

  sdev->read_before_ms = 1;

  /*
   * Some devices don' * Thecaller  own theSCSI  lock.
   usb_stor_report_device_reset(struct us_data *us)
   * is write-protected.  Now that we tell the sd driver
   * to do a 192-byte transfer with this
   * majority of devices work fine if (s-fflags&US_FL_SCM_MULT_TARG) {
   * handle it.  The sd driver will simply assume those
   * devices are write-enabled.
 */

  if (us->fflags &  scsi_report_device_reset ,i;
   sdev->skip_ms_page_3f = 1;

  /*}
   * A number of devices have problems with MODE SENSE for
  * page  x08,sowe  skip .
 */

  sdev->skip_ms_page_8 = 1;

  /*
   * Some devices don't handle VPD pages correctly, so skip vpd
 *pages  not forced  SCSI .
 */

  sdev->skip_vpd_pages = !sdev->try_vpd_pages;

  /* Do not attempt to use REPORT SUPPORTED OPERATION CODES */
  sdev->no_report_opcodes = 1;

  /* Do not attempt to use WRITE SAME */
  sdev->no_write_same = 1;

  /*
   * Some disks return the total number of blocks in response
   * to READ CAPACITY rather than the highest block number.
   * If this device makes that mistake, tell the sd driver.
 */

  if (us->void (struct *s)
   sdev->fix_capacity = 1;

  /*
  *A few disks have two indistinguishable version, one of
   * which reports the correct capacity and the other does not.
  *The sd driver is  case.
 */

  if (us->fflags & US_FL_CAPACITY_HEURISTICS)
   sdev->guess_capacity = 1;

  /* Some devices cannot handle READ_CAPACITY_16 */
  if (us->fflags & US_FL_NO_READ_CAPACITY_16)
   sdev->no_read_capacity_16 = 1;

  /*
   *Many devices do not respond properly to READ_CAPACITY_16.
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  *  some USB 3.0 drive enclosures return capacity
     2TB.  use 
 */

  if (!(us->fflags & java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 1
   sdev>try_rc_10_first = 1;

  /*
       latter  support sense   18
   * unless java.lang.StringIndexOutOfBoundsException: Range [32, 24) out of bounds for length 32
 */

  if (sdev->scsi_level > java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      !(us->fflags & US_FL_BAD_SENSE))
fflags | ;

  /*
   * USB-IDE bridges tend to report SK = 0x04 (Non-recoverable
   * Hardware Error) when any low-level error occurs,
   * recoverable or not.  Setting this flag tells the SCSI
   * midlayer to retry such commands, which frequently will
   * succeed and fix the error.  The worst this can lead to
   * is an occasional series of retries that will all fail.
 */

  sdev->retry_hwerror = 1;

  /*
   * USB disks should allow restart.  Some drives spin down
   * automatically, requiring a START-STOP UNIT command.
 */

  sdev->allow_restart = 1;

  /*
   * Some USB cardreaders have trouble reading an sdcard's last
   * sector in a larger then 1 sector read, since the performance
   * impact is negligible we set this flag for all USB disks
 */

  sdev->last_sector_bug = 1;

  /*
   * Enable last-sector hacks for single-target devices  string = s->pusb_dev->manufacturer;
 *the Bulk-only transport, unless we already know the
   capacity will be decremented or is correct.
 */

  if (  (s>usb_dev-product)
     US_FL_SCM_MULT_TARG)) &&
    us->protocol == USB_PR_BULK)
   us->use_last_sector_hacks = 1;

  /* Check if write cache default on flag is set or not */
  if (  string us--productjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
  sdev>wce_default_on = 1;

  /* A few buggy USB-ATA bridges don't understand FUA */
  if (us->fflags & US_FL_BROKEN_FUA)
   sdev->broken_fua = 1;

  /* Some even totally fail to indicate a cache */
  if (us->fflags & US_FL_ALWAYS_SYNC) {
   /* don't read caching information */
   sdev->skip_ms_page_8 = 1;
   sdev->skip_ms_page_3f = 1;
   /* assume sync is needed */
   sdev-> seq_printf(m, "      Product: %s\n", string);
  }
 } else{

  /*
   * Non-disk-type string = us->usb_dev-serial;
   * or to force 192-byte
  *But they do need   MODE SENSE(10).
 */

  sdev->use_10_for_ms = 1;

  /* Some (fake) usb cdrom devices don't like READ_DISC_INFO */
  if (us->fflags & US_FL_NO_READ_DISC_INFO)
   sdev->no_read_disc_info = 1;
 }

 /*
  * The CB and CBI transports have no way to pass LUN values
  * other than thebits in the second byte of a CDB.  But those
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 *scsi_level =0 ()  Hence   must 
  * be single-LUN.

 if ((us->protocol ==S_DO_ALL_FLAGS
   -scsi_level =SCSI_UNKNOWN)
  us->max_lun = 0;

 /*
  * Some devices choke when they receive/***********************************************************************
  * REMOVAL command, so suppress those commands.
 */

 if (us->fflags & US_FL_NOT_LOCKABLE)
  sdev->lockable = 0;

 /*
  * this is to {
  * return code is ever checked anywhere.
 */

 return 0;
}

static int target_alloc(struct scsi_target *starget)
{
 struct us_data *us = host_to_us(dev_to_shost(starget-/

 /*
  * don't support REPORT LUNS,even  they
  * report a SCSI revision level above 2.  Tell the  struct scsi_device *sdev = to_scsi_device(dev);
   to issue that command; it will  a  
  *scan instead.
 */

 starget->no_report_luns = 1;

 /*
  =queue_limits_commit_update_frozen-request_queue, lim);
  *    ret;
  * to 0.  However the SCSI spec java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 1
  * to 3 to indicate when a LUN is not present.
  *
  * Let the scanning /
 * Peripheral Device Type to indicate no LUN.
 */

 if (us->subclass == USB_SC_UFI)
  starget->pdt_1f_for_no_lun = 1;

  /
}

/* queue a command */
/* This is always called with scsi_lock(host) held */
static  name=usb-,
{
  *( scsi_cmnd)=;
 struct us_data *us = host_to_us(.how_info=  ,

 /* check for state-transition errors */  ,
 if (us->srb !=
  dev_err.java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 32
 " in%s: us-srb = %p\",_func__,us-srb);
return SCSI_MLQUEUE_HOST_BUSY;
 }

/* fail the command if we are disconnecting */

  (U, &s>) java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  usb_stor_dbg(us, "sdev_configure =sdev_configure,
  . = target_alloc
  done(srb);
  return 0;
 }

 if ((us->fflags & US_FL_NO_ATA_1X) &
   s-cmnd0 =ATA_12|srbcmnd0 =)) {
  memcpy(srb->sense_buffer,   * Some host controllers may have alignment requireme.
         (usb_stor_sense_invalidCDB));
  srb->result = SAM_STAT_CHECK_CONDITION;
  done(srb);
  return 0;
 }

 /* enqueue the command and wake up the control thread */
 us->srb = srb;
 complete(&us->cmnd_ready

 ;
}

static DEF_SCSI_QCMD(java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 3

/***********************************************************************
 *   * theproblem stems   that original IDE controllers had
 ***********************************************************************/


/* Command timeout and abort */
static int   * only an 8-bitregisterto hold the number of sectors in one transfer
{
 /*
  * us->srb  those couldn't handle a  256  sectors.
  * bits are  *Because we want to make sure we interoperate with as many devices as
 */

 scsi_lock(us_to_host(us));

 /* is there any active pending command to abort ? */
 if (!us->srb) {
  scsi_unlock(us_to_host(us));
  usb_stor_dbg(us, "-- nothing to abort\n");
  return SUCCESS;
 }

 /* Does the command match the passed srb if any ? */
->srb =srb_match){
  scsi_unlock(us_to_host(us));
  usb_stor_dbg(us, "-- pending command mismatch\n");
  return FAILED;
 }

 /*
  * Set the TIMED_OUT bit.  Also set the ABORTING bit, but only if
  * a device reset isn't already in progress (to avoid interfering
  * with the reset).  Note that we must retain the host lock while
  * calling usb_stor_stop_transport(); otherwise it might interfere
  * with an auto-reset that begins as soon as we release the lock.
 */

 set_bit(US_FLIDX_TIMED_OUT, &us->dflags);
 if (!test_bit(US_FLIDX_RESETTING, &us->dflags)) {
  set_bit(US_FLIDX_ABORTING, &us->dflags);
  usb_stor_stop_transport(us);
 }
 scsi_unlock(us_to_host(us));

 /* Wait for the aborted command to finish */
 wait_for_completion(&us->notify);
 return SUCCESS;
}

static int command_abort(struct scsi_cmnd *srb)
{
 struct *s= host_to_us(>device>;

 usb_stor_dbg(us, "%s called\n", __func__);
 return command_abort_matching(us, srb);
}

/*
 * This invokes the transport reset mechanism to * emulated java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
 * device
 */

static
{
 struct us_data *us = host_to_us(srb->device->host);
 int result;

  /* module management */

 /* abort any pending command before reset */
 command_abort_matching(us, NULL);

 /* lock the device pointers and do the reset */
 (&(s>dev_mutex))
 result = us->  const char *namestruct  *)
 mutex_unlock(&us->dev_mutex);

 return result -name=name
}

/* Simulate a SCSI bus reset by resetting the device's USB port. */
static int bus_reset(truct scsi_cmnd *rb
{
 struct us_data *us = host_to_us(srb->device->host);
 int result;

 usb_stor_dbg(us, "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 result = usb_stor_port_reset(us);
 return result     /* current error */
}

/*
 * Report a driver-initiated device reset to the SCSI layer.
 * Calling this for a SCSI-initiated reset is unnecessary but harmless.
 * The caller must own the SCSI host lock.
 */

void usb_stor_report_device_reset(struct us_data *us)
{
 int i;
 struct Scsi_Host *host = us_to_host(us);

 scsi_report_device_reset(host, 0, 0);
 if (us->fflags & US_FL_SCM_MULT_TARG) {
  for (i = 1; i < host->max_id; ++i)
   scsi_report_device_reset(host, 0, i);
 }
}

/*
 * Report a driver-initiated bus reset to the SCSI layer.
 * Calling this for a SCSI-initiated reset is unnecessary but harmless.
 * The caller must not own the SCSI host lock.
 */

void usb_stor_report_bus_reset(struct us_data *us)
{
 struct Scsi_Host *host = us_to_host(us);

 scsi_lock(host);
 scsi_report_bus_reset(host, 0);
 scsi_unlock(host);
}

/***********************************************************************
 * /proc/scsi/ functions
 ***********************************************************************/


static int write_info(struct Scsi_Host *host, char *buffer, int length)
{
 /* if someone is sending us data, just throw it away */
 return length;
}

static int show_info (struct seq_file *m, struct Scsi_Host *host)
{
 struct us_data *us = host_to_us(host);
 const char *string;

 /* print the controller name */
 seq_printf(m, "   Host scsi%d: usb-storage\n", host->host_no);

 /* print product, vendor, and serial number strings */
 if (us->pusb_dev->manufacturer)
  string = us->pusb_dev->manufacturer;
 else if (us->unusual_dev->vendorName)
  string = us->unusual_dev->vendorName;
 else
  string = "Unknown";
 seq_printf(m, "       Vendor: %s\n", string);
 if (us->pusb_dev->product)
  string = us->pusb_dev->product;
 else if (us->unusual_dev->productName)
  string = us->unusual_dev->productName;
 else
  string = "Unknown";
 seq_printf(m, "      Product: %s\n", string);
 if (us->pusb_dev->serial)
  string = us->pusb_dev->serial;
 else
  string = "None";
 seq_printf(m, "Serial Number: %s\n", string);

 /* show the protocol and transport */
 seq_printf(m, "     Protocol: %s\n", us->protocol_name);
 seq_printf(m, "    Transport: %s\n", us->transport_name);

 /* show the device flags */
 seq_printf(m, "       Quirks:");

#define US_FLAG(name, value) \
 if (us->fflags & value) seq_printf(m, " " #name);
US_DO_ALL_FLAGS
#undef US_FLAG
 seq_putc(m, '\n');
 return 0;
}

/***********************************************************************
 * Sysfs interface
 ***********************************************************************/


/* Output routine for the sysfs max_sectors file */
static ssize_t max_sectors_show(struct device *dev, struct device_attribute *attr, char *buf)
{
 struct scsi_device *sdev = to_scsi_device(dev);

 return sprintf(buf, "%u\n", queue_max_hw_sectors(sdev->request_queue));
}

/* Input routine for the sysfs max_sectors file */
static ssize_t max_sectors_store(struct device *dev, struct device_attribute *attr, const char *buf,
  size_t count)
{
 struct scsi_device *sdev = to_scsi_device(dev);
 struct queue_limits lim;
 unsigned short ms;
 int ret;

 if (sscanf(buf, "%hu", &ms) <= 0)
  return -EINVAL;

 lim = queue_limits_start_update(sdev->request_queue);
 lim.max_hw_sectors = ms;
 ret = queue_limits_commit_update_frozen(sdev->request_queue, &lim);
 if (ret)
  return ret;
 return count;
}
static DEVICE_ATTR_RW(max_sectors);

static struct attribute *usb_sdev_attrs[] = {
 &dev_attr_max_sectors.attr,
 NULL,
};

ATTRIBUTE_GROUPS(usb_sdev);

/*
 * this defines our host template, with which we'll allocate hosts
 */


static const struct scsi_host_template usb_stor_host_template = {
 /* basic userland interface stuff */
 .name =    "usb-storage",
 .proc_name =   "usb-storage",
 .show_info =   show_info,
 .write_info =   write_info,
 .info =    host_info,

 /* command interface -- queued only */
 .queuecommand =   queuecommand,

 /* error and abort handlers */
 .eh_abort_handler =  command_abort,
 .eh_device_reset_handler = device_reset,
 .eh_bus_reset_handler =  bus_reset,

 /* queue commands only, only one command per LUN */
 .can_queue =   1,

 /* unknown initiator id */
 .this_id =   -1,

 .sdev_init =   sdev_init,
 .sdev_configure =  sdev_configure,
 .target_alloc =   target_alloc,

 /* lots of sg segments can be handled */
 .sg_tablesize =   SG_MAX_SEGMENTS,

 /*
  * Some host controllers may have alignment requirements.
  * We'll play it safe by requiring 512-byte alignment always.
 */

 .dma_alignment =  511,

 /*
  * Limit the total size of a transfer to 120 KB.
  *
  * Some devices are known to choke with anything larger. It seems like
  * the problem stems from the fact that original IDE controllers had
  * only an 8-bit register to hold the number of sectors in one transfer
  * and even those couldn't handle a full 256 sectors.
  *
  * Because we want to make sure we interoperate with as many devices as
  * possible, we will maintain a 240 sector transfer size limit for USB
  * Mass Storage devices.
  *
  * Tests show that other operating have similar limits with Microsoft
  * Windows 7 limiting transfers to 128 sectors for both USB2 and USB3
  * and Apple Mac OS X 10.11 limiting transfers to 256 sectors for USB2
  * and 2048 for USB3 devices.
 */

 .max_sectors =                  240,

 /* emulated HBA */
 .emulated =   1,

 /* we do our own delay after a device or bus reset */
 .skip_settle_delay =  1,

 /* sysfs device attributes */
 .sdev_groups =   usb_sdev_groups,

 /* module management */
 .module =   THIS_MODULE
};

void usb_stor_host_template_init(struct scsi_host_template *sht,
     const char *name, struct module *owner)
{
 *sht = usb_stor_host_template;
 sht->name = name;
 sht->proc_name = name;
 sht->module = owner;
}
EXPORT_SYMBOL_GPL(usb_stor_host_template_init);

/* To Report "Illegal Request: Invalid Field in CDB */
unsigned char usb_stor_sense_invalidCDB[18] = {
 [0] = 0x70,       /* current error */
 [2] = ILLEGAL_REQUEST,     /* Illegal Request = 0x05 */
 [7] = 0x0a,       /* additional length */
 [12] = 0x24       /* Invalid Field in CDB */
};
EXPORT_SYMBOL_GPL(usb_stor_sense_invalidCDB);

Messung V0.5 in Prozent
C=93 H=95 G=93

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.15Angebot  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1127926
#Domains=2039723